0

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

4

2 回答 2

1

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

一种更简单的方法是:

Process.GetCurrentProcess().ProcessName

我认为您不应该使用 a FileInfo,这很慢并且需要权利。您可以改用 System.IO.Path 静态类

于 2012-04-24T21:20:04.543 回答
1

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

    string name = Path.GetFileNameWithoutExtension(
                    System.Windows.Forms.Application.ExecutablePath);
于 2012-04-25T00:52:45.033 回答