在.NET中进行模拟时,如何获取应用程序的名称

时间:2012-04-24 21:17:06

标签: c# .net vb.net

在.NET中进行模拟时,如何获取应用程序的名称。我对你喜欢VB.NET或C#的.NET语言没有任何偏好。我本质上是这样做的(借口VB.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("."))

不使用“New Impersonator(...)”一切都很好。当我使用“模仿者”时,我得到:

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文件的名称?

2 个答案:

答案 0 :(得分:1)

好像你冒充的人无法访问正在运行的文件。确认模拟用户不在某个文件夹中。例如,在服务器上运行普通用户没有访问权限。尝试将用户设置为计算机上的本地管理员,或者只是授予他访问该文件夹的权限。

更简单的方法是:

Process.GetCurrentProcess().ProcessName

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

答案 1 :(得分:1)

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

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