我有一个应用程序需要以管理员身份运行,但应用程序的一部分是使用WNetAddConnection2映射驱动器,我相信它要求它在普通用户上下文中由于凭据而运行等等。有没有办法在正常的用户上下文中执行这段代码而不创建单独的进程。在另一个用户环境中执行代码
编辑
从到目前为止,我还得到了这一点,但它不工作的意见。我预料不会,因为我真的不明白我该如何使用它。如果我提出一个新问题,最好也许是最好的?
class Program
{
[DllImport("advapi32.DLL")]
public static extern bool ImpersonateLoggedOnUser(IntPtr hToken);
[DllImport("advapi32.DLL")]
public static extern bool RevertToSelf();
static void Main(string[] args)
{
IntPtr phToken = IntPtr.Zero;
ImpersonateLoggedOnUser(phToken);
MapDrives();
RevertToSelf();
}
}
EDIT
如果当前用户具有管理员权限,则主处理升高与清单中的代码,其被升高我想在用户运行命令非提升空间因为这似乎有不同的环境变量等。我相信一旦一个线程启动它不能改变自己,它需要运行一个新的。
来获得当前用户的身份验证令牌的方式是通过WindowsIdentity.GetCurrent()。令牌。不过,我认为在你的情况下,它会返回管理员用户的令牌(因为你的应用程序以管理员身份运行)。 – 2010-06-04 18:52:55
这是模仿。一个非常方便的[nuget包](https://www.nuget.org/packages/SimpleImpersonation/2.0.0)和[相关帖子](https://stackoverflow.com/a/7250145/465053)来实现通过'LogonUser()'p/invoke调用相同。 – RBT 2017-07-06 10:25:17