我在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 回答
喜,
Win Forms application 必须以管理员权限运行才能启动具有更高权限的其他进程 .
您的问题与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,而不必为其提供更高的权限 .