我正在尝试使用其他用户(而不是服务用户)从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
命令时,一切正常。
有什么问题?
答案 0 :(得分:0)
好像是权限问题。这可以是exe所在位置的文件夹级别,也可以是运行该进程的用户。
要诊断这一点,您可以先转到exe所在的文件夹。然后右键单击并将权限设置为“everyone”并完全控制。然后尝试再次运行,看看你是否收到相同的消息。
此外,当您运行Visual Studio时,请在开始时右键单击并以管理员身份运行。我从你的评论中看出这个工作正常,让我相信它实际上与许可相关。例如同一域中的不同用户是?一旦你计算了applcation所在文件夹的权限,创建一个拥有该文件夹权限的帐户,然后让任何进程安排/运行exe在该帐户下执行。
更新 - 上面的评论提示了另一个想法,你可以使用system.diagnostics在代码的每个点写入事件日志条目,以帮助确定出错的地方。另一个可能有用的工具,如果WinDBG可以获得有关抛出该异常的更多信息。