带有凭据的C#Process.Start因访问被拒绝而失败

时间:2017-10-31 14:06:58

标签: c# process credentials

我在C#中有一个Win Forms应用程序,它运行在员工PC上。 在应用程序中,我使用Process.Start调用另一个可执行文件,但我传递了具有域管理员权限的用户的用户名和密码,因为员工没有运行可执行文件的权限。

可执行文件位于C:

上的文件夹中

exe在Windows XP计算机上成功启动,但在Windows 7上因“访问被拒绝”错误而失败。 我找不到解决方案。有什么想法吗?

try
        {
            var pass = new SecureString();
            pass.AppendChar('b');
            pass.AppendChar('l');
            pass.AppendChar('a');
            pass.AppendChar('b');
            pass.AppendChar('l');
            pass.AppendChar('a');

             var pro = new ProcessStartInfo
            {
                FileName = AppDomain.CurrentDomain.BaseDirectory + "myExe.exe",
                UserName = "username",
                Password = pass,
                Domain = "domain",
                UseShellExecute = false,
                RedirectStandardError = true,
                RedirectStandardOutput = true,
               RedirectStandardInput = true
            };
             Process.Start(pro); 

        }
        catch (Exception x)
        {
            MessageBox.Show("Failed to call updater.\n" + Help.ErrorMsg(x)); Application.Exit();
        }

1 个答案:

答案 0 :(得分:0)

平,

Win Forms应用程序 必须以管理员权限运行才能启动具有更高权限的其他进程。

您的问题与c#无关。这是一个UAC问题。

鉴于您正在给予他们和exe来运行具有提升权限的内容,我假设您考虑到用户可以使用反编译器来查看凭据。

此外,如果你想做得对,我建议使用像Microsoft SCCM(https://www.microsoft.com/en-us/cloud-platform/system-center-configuration-manager)这样的MDM解决方案。通过这样的方式你可以做到:

  • 在控制台更新中
  • 申请递送
  • 软件更新
  • 更多

您可以控制最终用户的PC,而不必为他们提供更高的权限。