C# Process.Start with credentials 失败,拒绝访问

Posted

技术标签:

【中文标题】C# Process.Start with credentials 失败,拒绝访问【英文标题】:C# Process.Start with credentials fails with Access Denied 【发布时间】:2017-10-31 14:06:57 【问题描述】:

我有一个 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();
        

【问题讨论】:

"我传递了一个在域上具有管理员权限的用户的用户名和密码" - erm, wtf?!?如果您真的这样做,那么您就有安全问题并且您设计错误。您可能有 XY 问题... 你有问题的代码示例吗? @MitchWheat 那么你有什么建议来运行这样一个可执行文件 您刚刚为您的所有用户(或任何入侵任何计算机的攻击者)提供了域管理员密码。这是一个糟糕的想法。 简单,在用户级别安装应用程序,而不是机器范围,因此不需要提升。使用 Wix,您可以将安装程序配置为按用户运行。 blogs.msdn.microsoft.com/astebner/2007/11/18/… 不知道您的安装程序。一个例子是 Chrome,它被安装到 C:\Users\lol\AppData\Local\Google\Chrome 而不是 \program 文件。如果必须是管理员,则使用 Active Directory 推出更新。 serverfault.com/questions/13111/… 【参考方案1】:

嘿,

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

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

鉴于您让他们和 exe 以提升的权限运行某些东西,我假设您考虑到用户可以使用反编译器来查看凭据。

检查一个简单的解决方案(也是一个危险的解决方案)来创建一个快捷方式,让标准用户能够以提升的权限运行应用程序: https://www.howtogeek.com/124087/how-to-create-a-shortcut-that-lets-a-standard-user-run-an-application-as-administrator/ 或者检查这个以获得通过 UAC 的另一个想法:https://superuser.com/questions/171917/force-a-program-to-run-without-administrator-privileges-or-uac

另外,如果你想做正确的事,我建议使用像 Microsoft SCCM (https://www.microsoft.com/en-us/cloud-platform/system-center-configuration-manager) 这样的 MDM 解决方案。有了这样的事情你可以做到:

在控制台更新中 应用交付 软件更新 更多

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

【讨论】:

以上是关于C# Process.Start with credentials 失败,拒绝访问的主要内容,如果未能解决你的问题,请参考以下文章

C# Process.Start()方法详解

C# Process.Start()方法详解

C# Process.Start()方法详解

C# Process.Start 路径

识别 C# Process.Start() 运行的可执行文件的崩溃

C# process.Start 文件名和传递参数