不能以不同的用户身份运行C#进程
问题描述:
我试图使用不同的用户(而不是服务用户)从C#服务运行djoin.exe
工具和System.Diagnostics.Process
。不能以不同的用户身份运行C#进程
该过程返回代码-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
命令,一切工作正常。
什么问题?
答
似乎它是一个权限问题。这可以位于exe文件所在的文件夹级别,也可以位于正在运行该进程的用户。
要诊断这一点,你可以先到exe文件所在的文件夹。然后右键单击并将权限设置为完全控制的“所有人”。然后尝试再次运行,看看你是否得到相同的消息。
另外,当您运行Visual Studio时,在开始时,右键单击并以管理员身份运行。我从你的评论中认为这个作品行得通,让我相信它实际上是许可相关的。例如同一个域中的不同用户?一旦您计算出应用程序所在文件夹的权限,请创建一个具有该文件夹权限的帐户,然后在该帐户下执行任何进程计划/运行exe。
更新 - 上述注释提示了另一个想法,您可以使用system.diagnostics在代码的每个位置编写eventlog条目,以帮助确定发生了什么问题。如果WinDBG获取关于抛出异常的更多信息,可能会用到另一个工具。
这是什么版本的Windows?而且,你的应用程序是否拥有更高的特权 – 2014-09-28 18:40:47
Windows 2008服务器R2。这是一项服务。你是什么意思提升特权? – Igal 2014-09-28 21:44:21
该程序使用的某个DLL的DllMain()入口点返回FALSE。它不高兴,你不知道为什么,除非它在应用程序事件日志中留下消息。不好的可能性你会找到一个。你没有足够的旋钮来调整,尽管你绝对应该尝试将LoadUserProfile设置为* true *。请联系作者或应用程序的所有者以获取帮助。 – 2014-09-28 23:41:35