c#的过程.从另一个不使用Windows 8/10的用户开始

本文关键字:用户 开始 Windows 过程 另一个 | 更新日期: 2023-09-27 18:19:24

我有一个程序,我用一个域用户启动USMT(加载或扫描状态),该域用户在本地计算机上具有管理权限。

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

然而,当正确运行load/scanstate时失败,因为它当前没有提升。但是,在没有管理权的情况下,我怎样才能克服这一点呢?

致以最亲切的问候托马斯·尼森

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

c#的过程.从另一个不使用Windows 8/10的用户开始

据我所知,"runas"动词(任何动词,真的)只有在UseShellExecute设置为true时才受到尊重。尝试将UseShellExecute设置为true,同时使用WindowStyle属性隐藏shell窗口。

然而,这将阻止您从流程中捕获输入和输出流。这是你感兴趣的事情吗?

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

检查此线程以了解如何实现模拟。因此,进程最初将以windows域用户的权限执行,而在模拟块中的逻辑将以模拟用户的权限执行。

//Code outside the impersonation block will be executed with current user privilege
Using(Impersonator impersonator = new Impersonator())
{
  //Code written within this block will be executed with elevated(impersonated) user privilege.
}