Я пытаюсь получить текущее имя пользователя в среде Windows, использующей проверку подлинности Windows. Код существует в библиотеке классов, которая построена и ссылается в виде отдельного приложения Visual Studio:My.User.CurrentPrincipal не работает в библиотеке классов
Function GetUserName() As String
If TypeOf My.User.CurrentPrincipal Is
Security.Principal.WindowsPrincipal Then
' The application is using Windows authentication.
' The name format is DOMAIN\USERNAME.
Dim parts() As String = Split(My.User.Name, "\")
Dim username As String = parts(1)
Return username
Else
' The application is using custom authentication.
Return My.User.Name
End If
End Function
Я получаю сообщение об ошибке, когда он находится в библиотеке классов. My.User.CurrentPrincipal возвращается с {System.Security.Principal.GenericPrincipal} и My.User.Name пустым. Когда я помещаю тот же самый код в новое приложение форм Windows, он работает - My.User.CurrentPrincipal возвращается с {System.Security.Principal.WindowsPrincipal} и My.User.Name - это имя пользователя.
Документация Microsoft предполагает, что объект My.User будет работать в библиотеках классов. Кто-нибудь знает, почему я получаю разные значения, когда он помещается в библиотеку классов и добавляется как ссылка .dll на родительское приложение?
Родительское приложение представляет собой библиотеку классов, которая является надстройкой для Microsoft PowerPoint. Код в исходном приложении, которое вызывает приведенный выше код (так называемый UsageDataCollection.dll) является:
Public Class rbnOvaPowerPoint
Private DataCollector As UsageDataCollection.DataCollector
Private Sub butShare_Click(sender As Object, e As RibbonControlEventArgs) Handles butShare.Click
OtherTasks.CreateMailItem()
End Sub
End Class
И затем в отдельном модуле:
Module OtherTasks
Private DataCollector As New UsageDataCollection.DataCollector
Sub CreateMailItem()
Dim OutlookApp As Outlook._Application = CreateObject("Outlook.Application")
Dim mail As Outlook.MailItem = Nothing
Dim mailRecipients As Outlook.Recipients = Nothing
Dim mailRecipient As Outlook.Recipient = Nothing
DataCollector.UsageStatistics("CreateMailItem")
Try
mail = OutlookApp.CreateItem(Outlook.OlItemType.olMailItem)
mail.Subject = "OvaPowerPoint"
mail.Body = "Check out OvaPowerPoint, a custom-built Arup add-in for PowerPoint!" & Strings.Chr(13) & Strings.Chr(13) & "About the Add-In:" & Strings.Chr(13) & "http://wiki.oasys.intranet.arup.com/X-Wiki/index.php/OvaPowerPoint" & Strings.Chr(13) & Strings.Chr(13) & "Installation File:" & Strings.Chr(13) & "\\n-ynas12\Software\Custom%20Applications\Plug-Ins\Microsoft%20PowerPoint\OvaPowerPoint\setup.exe"
mail.Display(True)
Catch ex As Exception
System.Windows.Forms.MessageBox.Show(ex.Message,
"An exception is occured in the code of add-in.")
Finally
If Not IsNothing(mailRecipient) Then System.Runtime.InteropServices.Marshal.ReleaseComObject(mailRecipient)
If Not IsNothing(mailRecipients) Then System.Runtime.InteropServices.Marshal.ReleaseComObject(mailRecipients)
If Not IsNothing(mail) Then System.Runtime.InteropServices.Marshal.ReleaseComObject(mail)
End Try
End Sub
End Module
И подпрограмме UsageStatistics в UsageDataCollection.dll выглядит :
Imports System.IO
Imports System.Text
Public Class DataCollector
Public Sub UsageStatistics(myAction As String)
Dim myAssemblyName As String = System.Reflection.Assembly.GetCallingAssembly.GetName.Name
Dim myFilePath As String = "\\n-ywpress01\uploads\UsageData\" & myAssemblyName & ".csv"
Using LogFile As New StreamWriter(myFilePath, True)
LogFile.WriteLine("[" & DateTime.Now.ToUniversalTime.ToString("yyyy/MM/dd HH':'mm':'ss") & "]" & Chr(44) & GetUserName() & Chr(44) & GetUserLocation() & Chr(44) & myAction)
LogFile.Close()
End Using
End Sub
End Class
Благодаря
Zak
С, где эта функция называется? –
Привет Крис, сейчас он вызван из библиотеки классов, которая является надстройкой для Microsoft PowerPoint. Я отредактирую свой пост, чтобы включить в него некоторые подробности. – Zak
Я выполнял некоторые тесты и обнаружил, что UsageDataCollection.dll работает, если на него ссылается приложение Windows Forms. Что-то происходит, когда я пытаюсь ссылаться на него в надстройке PowerPoint (которая принимает форму библиотеки классов) ... – Zak