在.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文件的名称?
答案 0 :(得分:1)
好像你冒充的人无法访问正在运行的文件。确认模拟用户不在某个文件夹中。例如,在服务器上运行普通用户没有访问权限。尝试将用户设置为计算机上的本地管理员,或者只是授予他访问该文件夹的权限。
更简单的方法是:
Process.GetCurrentProcess().ProcessName
我认为你不应该使用FileInfo
,这是缓慢且需要权利的。
您可以使用System.IO.Path静态类
答案 1 :(得分:1)
我对Impersonator一无所知,但这适用于我的大多数应用程序(甚至是WPF应用程序)。
string name = Path.GetFileNameWithoutExtension(
System.Windows.Forms.Application.ExecutablePath);