2015-10-26 43 views
0

我有程序,我启动USMT(加载或scanstate)与域用户,在本地计算机上给予管理权限。这在Windows 7中工作得非常好。C#Process.Start与另一个用户不工作在Windows 8/10

程序需要以非管理员用户身份启动,但以管理员权限执行load/scanstate。

但是,当正确运行load/scanstate时会失败,因为它没有正确提升。但是,我如何克服这一点,没有管理权限?

问候 托马斯·尼森

 ProcessStartInfo restoreProcessInfo = new ProcessStartInfo 
     { 
      Verb = "runas", 
      UseShellExecute = false, 
      Domain = strAdminDomain, 
      UserName = strAdminUsername, 
      Password = strAdminPassword, 
      FileName = loadstate.exe", 
      Arguments = "blablabla" 
     } 
+0

你的意思是你的exe可以由非管理员用户执行,但是exe文件中的一段逻辑必须以提升的权限执行? – Kurubaran

+0

正确,load-和scanstate需要管理权限才能运行。但用户不是管理员,因此无法直接运行。因此,我需要用另一个用户开始的流程,为他们提供本地管理员权限。 – user2931144

回答

0

据我所知,在“运行方式”动词(动词的任何,真的)当UseShellExecute设置为true只尊重。尝试将UseShellExecute设置为true,同时使用WindowStyle属性隐藏shell窗口。

但是,这会阻止您从流程中捕获输入和输出流。你有兴趣做什么?

+0

是的,我也得出结论,runas不工作,如果它不在那里,至少当UseShellExecute是假的。不过,我不能将UseShellExecute设置为true,因此我无法从提供的用户名和密码开始。我还需要打开窗口,否则我无法了解进程的进展情况,以及我需要并退出代码的情况。 – user2931144

+0

您仍将获得退出代码,但I/O流将不可用于您的应用程序。 当然,隐藏窗口是可选的。 – user5488406

+0

好的,但仍然存在UseShellExecute为true的问题,不允许我使用ProcessStartInfo的用户名和密码参数 – user2931144

0

您可以模拟用户。模拟是线程使用与拥有线程的进程不同的安全信息来执行的能力。

检查this如何实施模拟的线程。因此,这个过程将首先用windows域用户的权限执行,并且放置在模拟块内的逻辑将与模拟用户的权限一起执行。

​​
相关问题