无法以不同的用户身份运行C#进程

时间:2014-09-28 16:15:37

标签: c# .net impersonation

我正在尝试使用其他用户(而不是服务用户)从C#服务运行djoin.exe System.Diagnostics.Process工具。

该过程返回代码-1073741502

在事件日志中我可以看到:

  

应用程序弹出窗口:djoin.exe - 应用程序错误:应用程序是   无法正确启动(0xc0000142)。单击“确定”关闭   应用

没有stderr或stdout。

以下是我使用的流程配置:

ProcessStartInfo startInfo = new ProcessStartInfo
{
    Arguments = "/Provision /Domain domain.com /Machine PC12 /SaveFile NUL /printblob",
    WorkingDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),
    FileName = "djoin.exe"
    UseShellExecute = false,
    RedirectStandardError = true,
    RedirectStandardInput = true,
    RedirectStandardOutput = true,
    CreateNoWindow =true,
    Domain = "domain.com",
    UserName = "other-user",
    Password = "***"
};

if (username!=null)
{
    startInfo.Domain = domain;
    startInfo.UserName = username;
    startInfo.Password = ToSecureString(password);
}

p = new Process { StartInfo = startInfo };
p.Start();

使用RUNAS命令时,一切正常。

有什么问题?

1 个答案:

答案 0 :(得分:0)

好像是权限问题。这可以是exe所在位置的文件夹级别,也可以是运行该进程的用户。

要诊断这一点,您可以先转到exe所在的文件夹。然后右键单击并将权限设置为“everyone”并完全控制。然后尝试再次运行,看看你是否收到相同的消息。

此外,当您运行Visual Studio时,请在开始时右键单击并以管理员身份运行。我从你的评论中看出这个工作正常,让我相信它实际上与许可相关。例如同一域中的不同用户是?一旦你计算了applcation所在文件夹的权限,创建一个拥有该文件夹权限的帐户,然后让任何进程安排/运行exe在该帐户下执行。

更新 - 上面的评论提示了另一个想法,你可以使用system.diagnostics在代码的每个点写入事件日志条目,以帮助确定出错的地方。另一个可能有用的工具,如果WinDBG可以获得有关抛出该异常的更多信息。