带有Impersonation的ProcessStartInfo会导致kernel32.dll错误

时间:2011-06-03 10:08:15

标签: c# impersonation processstartinfo

我正在使用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下正常启动。我做错了什么或遗失了什么?出错了什么?

0 个答案:

没有答案