我正在使用ProcessStartInfo
类启动应用程序。举个例子,假设我正在尝试启动cmd.exe
,我需要以特定用户身份启动它,所以我使用以下代码:
ProcessStartInfo psi = new ProcessStartInfo(path_to_app);
System.Security.SecureString ssPassword = new System.Security.SecureString();
foreach (char c in password)
{
ssPassword.AppendChar(c);
}
psi.Domain = domain;
psi.UserName = username;
psi.Password = ssPassword;
psi.UseShellExecute = false;
psi.CreateNoWindow = true;
psi.WindowStyle = ProcessWindowStyle.Hidden;
p = Process.Start(psi);
如果我在任务管理器中查看进程,我看到应用程序是由正确的用户启动的,但是在应用程序启动后立即关闭。
在事件查看器中,我收到以下错误:
错误应用程序cmd.exe,版本 1.0.0.0,故障模块kernel32.dll,版本5.2.3790.4480,故障地址 0x0000bef7。
我已经看过使用P / Invoke进行模拟的方法,但我真的想不惜一切代价避免这种情况。
如果我不使用模拟,它会在NETWORK SERVICE下正常启动。我做错了什么或遗失了什么?出错了什么?