如何在C#(在Web服务器上)使用提升的凭据运行shell命令?

时间:2016-05-03 18:28:20

标签: c# asp.net process permissions elevated-privileges

我有一个Web服务,我希望能够运行需要管理员权限的shell命令。 (该命令是DJOIN,用计算机帐户预先登录AD并创建文件。)

我正在测试如下:

System.Diagnostics.Process proc = new System.Diagnostics.Process();
System.Security.SecureString ssPwd = new System.Security.SecureString();
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.FileName = "cmd.exe";
proc.StartInfo.Arguments = "/C echo %username% > c:\\test\\user.txt";
proc.StartInfo.Domain = "mydomain";
proc.StartInfo.UserName = "myadmin";
string password = "mypassword";
for (int x = 0; x < password.Length; x++)
{
    ssPwd.AppendChar(password[x]);
}
proc.StartInfo.Password = ssPwd;
proc.Start();

Web服务器上的c:\ test文件夹具有正确的权限,如果我在不指定凭据的情况下运行它,则代码块运行正常。但是,当我添加它时,它会失败。

我也试过包括:

proc.StartInfo.Verb = "runas"

但这也不起作用。

如何以提升用户身份运行命令?

1 个答案:

答案 0 :(得分:0)

我的工作方式是使用此代码:

System.Diagnostics.Process proc = new System.Diagnostics.Process();
System.Security.SecureString ssPwd = new System.Security.SecureString();
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.FileName = "cmd.exe";
proc.StartInfo.Arguments = "/C echo %username% > c:\\test\\user.txt";
proc.StartInfo.Domain = "mydomain";
proc.StartInfo.Verb = "runas";
proc.StartInfo.UserName = "myadmin";
string password = "mypassword";
for (int x = 0; x < password.Length; x++)
{
    ssPwd.AppendChar(password[x]);
}
proc.StartInfo.Password = ssPwd;
proc.Start();

在IIS中设置应用程序池标识以使用此用户。