2012-04-24 82 views
0

如何在.NET中模拟时获取我的应用程序的名称。我对你喜欢VB.NET或C#的.NET语言没有任何偏好。我基本上是做(借口VB.NET这里):如何在.NET中模拟时获取我的应用程序的名称

theImpersonator = New Impersonator("username", "domain", "password") 
Dim finfo As New FileInfo(Process.GetCurrentProcess().MainModule.FileName) 
Dim appname As String = finfo.Name.Substring(0, finfo.Name.IndexOf(".")) 

不使用“新冒领(......)”一切都很好。当我用“冒领”我得到:

Access is denied 
    at System.Diagnostics.ProcessManager.OpenProcess(Int32 processId, Int32 access, Boolean throwIfExited) 
    at System.Diagnostics.NtProcessManager.GetModuleInfos(Int32 processId, Boolean firstModuleOnly) 
    at System.Diagnostics.NtProcessManager.GetFirstModuleInfo(Int32 processId) 
    at System.Diagnostics.Process.get_MainModule() 

如何找到我的应用程序.exe文件的名称,当我使用假冒?

回答

1

好像你模仿的人不能访问正在运行的文件。验证它不在某个文件夹中,不适用于模拟用户。例如,在服务器上运行的普通用户无权访问。尝试将用户设置为计算机上的本地管理员或仅授予他对文件夹的访问权限。

更简单的方法是只:

Process.GetCurrentProcess().ProcessName 

我不认为你应该使用FileInfo,这是缓慢的,需要权利。 您可以使用System.IO.Path静态类代替

+0

嗯,有趣的想法。他可能不知道 - 他能找出一些其他方式来运行哪个exe文件吗? – Denis 2012-04-24 21:24:09

+0

@Denis查看我的编辑 – 2012-04-24 21:24:34

+0

完美!正是我在找的! – Denis 2012-04-24 21:27:31

1

我对Impersonator一无所知,但这适用于大多数我的应用程序(甚至是WPF应用程序)。

string name = Path.GetFileNameWithoutExtension(
        System.Windows.Forms.Application.ExecutablePath); 
+0

有趣的想法,但我相信我会得到相同的“访问被拒绝”,因为模仿者没有访问该文件,因为@Oskar指出。感谢您的建议。 Denis 2012-04-25 15:39:32

+0

@Denis我不认为这会产生错误。 'Path.GetFileNameWithoutExtension'和'System.Windows.Forms.Application.ExecutablePath'都不需要对该目录的权限 – 2012-04-25 20:25:53

相关问题