C# 以用户身份运行时访问映射驱动器

C# 以用户身份运行时访问映射驱动器,c#,C#,我有一个程序可以运行。我从这个程序启动其他可执行文件 现在,默认情况下,我创建的任何进程都将运行提升。所以,对于它运行的一些程序,我希望它们以标准用户登录的方式运行,就像它们没有被提升一样 主提升程序在登录用户的用户帐户下运行 这就是我试过的 var psi = new ProcessStartInfo(Exe.GetExePath()); psi.UseShellExecute = false; psi.RedirectStandardError = false; psi.RedirectSt

我有一个程序可以运行。我从这个程序启动其他可执行文件

现在,默认情况下,我创建的任何进程都将运行提升。所以,对于它运行的一些程序,我希望它们以标准用户登录的方式运行,就像它们没有被提升一样

主提升程序在登录用户的用户帐户下运行

这就是我试过的

var psi = new ProcessStartInfo(Exe.GetExePath());
psi.UseShellExecute = false;
psi.RedirectStandardError = false;
psi.RedirectStandardInput = false;
psi.RedirectStandardOutput = false;
psi.WorkingDirectory = Exe.Version.GetInstallPath();
if(Exe.Elevated == false)
{
    psi.UserName = Global.Username;
    var pass = new SecureString();
    Global.Password.ToCharArray().ToList().ForEach(p => pass.AppendChar(p));
    psi.Password = pass;
}
Process = Process.Start(psi);
这是可行的,因为启动的程序没有提升。然而,由于某种奇怪的原因,它在此时失去了对所有映射网络驱动器的访问

我甚至试着在启动的应用程序中做类似的事情,但它也不起作用


因此,我想我想知道,我如何才能重新获得对这些映射驱动器的访问权(所有应用程序都在正确的用户下运行)。

默认情况下,UAC行为,提升的进程运行在不同的安全上下文上,因此它不应该能够访问任何映射驱动器,从该进程生成的任何进程也是如此。您可以通过在windows中运行提升的命令提示符来测试这一点;默认情况下,您无权访问非提升会话的映射驱动器

有关此行为和可能的解决方法(更改映射驱动器设置、全局注册表更改等)的更多详细信息,请参阅这些


如果更改UAC默认值或映射创建不是一个选项,一个可能(尽管复杂)的解决方法可能是在不提升的情况下启动应用程序,等待需要提升的代码启动第二个提升的进程,然后回调原始进程(在具有映射驱动器的安全上下文中运行的进程)要实际启动新应用程序,请使用IPC选择方法(例如WCF with.)

您的主提升程序是Windows服务吗?不抱歉,因为我提到这两个程序都以登录用户的身份运行。只是程序被提升了。当您以提升用户身份运行“net use”时,返回的是什么?我不相信您的答案实际上回答了这个问题。TL/DR?我相信我在“…一个可能的(尽管复杂的)解决方案…”之后回答了您的问题。我的回答中可能缺少的是,一旦提升了一个流程,映射就会丢失。不要回去。当然,除非您以非默认行为运行UAC(我不知道,因为您没有回答@AutomationNation的评论)