使用Process.Start将单独的程序作为本地管理员帐户启动

时间:2012-01-27 10:12:58

标签: c# windows-7 administrator

我们在我们的业务中使用了一个需要管理员权限才能运行的软件。但是,不允许员工访问具有管理员权限的帐户。这是在Windows 7环境中。

我们已通过GPO在所需的计算机上设置了本地管理员帐户。 我创建的软件的目的是启动需要管理员权限的软件作为本地管理员帐户。

到目前为止,软件工作正常,因为它正在以帐户的形式启动软件,但它仍然在没有管理员权限时提供错误。如果右键单击并在软件上运行并手动输入帐户详细信息,则可以正常工作。

SecureString pwd = new SecureString();
foreach (char c in "somepassword") { pwd.AppendChar(c); }
var psi = new ProcessStartInfo
{
    FileName = location,
    UserName = "localadminaccountname",
    Domain = Environment.MachineName,
    Password = pwd,
    UseShellExecute = false,
    Verb = "runas"
};
try
{
    Process.Start(psi);
}

代码中包含错误报告的异常catch语句。调用Process.Start(psi)时不会抛出异常。 (更新)

感谢。

修改的 公司构建的Windows 7将用户访问控制设置为“从不通知”,因此在调用Process.Start(psi)时不会显示UAC弹出窗口。

2 个答案:

答案 0 :(得分:0)

如果UAC设置为"从不通知"然后它被禁用 - 用户使用最大权限集运行。

这意味着如果用户是管理员帐户,则使用" runas"动词是不必要的。这也意味着如果用户不是管理员帐户,那么您的应用程序可能无法正常工作(因为用户无法提升并且OTS(肩上)高程被禁用。

答案 1 :(得分:0)

您是否尝试为IIS应用程序池设置“加载用户个人资料”?我有类似的情况。这对我有用。

参考更多信息: Security exceptions in ASP.NET and Load User Profile option in IIS 7.5