我有一个以网络服务运行的应用程序(我无法更改)并且需要以已知的本地用户身份运行命令(作为bat脚本执行)。我似乎没有得到回应,脚本也没有执行。奇怪的是,如果我以本地用户身份运行代码,它的工作没有问题。
System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.FileName = @"C:\Windows\System32\cmd.exe";
startInfo.Arguments = "/C " + @"c:\example\script.bat";
startInfo.UseShellExecute = false;
startInfo.RedirectStandardError = true;
startInfo.RedirectStandardOutput = true;
var sspw = new SecureString();
foreach (var c in "MyPassword")
{
sspw.AppendChar(c);
}
startInfo.Domain = Environment.MachineName;
startInfo.UserName = "MyUser";
startInfo.Password = sspw;
process.StartInfo = startInfo;
process.Start();
process.WaitForExit();
答案 0 :(得分:0)
我认为您需要在使用用户名/密码时设置工作目录
根据MSDN ...
如果提供了UserName和Password,则必须设置WorkingDirectory属性。如果未设置该属性,则默认工作目录为%SYSTEMROOT%\ system32。
答案 1 :(得分:0)
不确定该解决方案是否可以满足您的需要,但是如果将WorkingDirectory设置为当前目录(“。”),则它应该可以工作。基本上,运行该进程的用户应该对您提到的文件夹具有权限。