2014-09-28 35 views
2

我试图使用不同的用户(而不是服务用户)从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命令,一切工作正常。

什么问题?

+0

这是什么版本的Windows?而且,你的应用程序是否拥有更高的特权 – 2014-09-28 18:40:47

+0

Windows 2008服务器R2。这是一项服务。你是什​​么意思提升特权? – Igal 2014-09-28 21:44:21

+0

该程序使用的某个DLL的DllMain()入口点返回FALSE。它不高兴,你不知道为什么,除非它在应用程序事件日志中留下消息。不好的可能性你会找到一个。你没有足够的旋钮来调整,尽管你绝对应该尝试将LoadUserProfile设置为* true *。请联系作者或应用程序的所有者以获取帮助。 – 2014-09-28 23:41:35

回答

0

似乎它是一个权限问题。这可以位于exe文件所在的文件夹级别,也可以位于正在运行该进程的用户。

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

另外,当您运行Visual Studio时,在开始时,右键单击并以管理员身份运行。我从你的评论中认为这个作品行得通,让我相信它实际上是许可相关的。例如同一个域中的不同用户?一旦您计算出应用程序所在文件夹的权限,请创建一个具有该文件夹权限的帐户,然后在该帐户下执行任何进程计划/运行exe。

更新 - 上述注释提示了另一个想法,您可以使用system.diagnostics在代码的每个位置编写eventlog条目,以帮助确定发生了什么问题。如果WinDBG获取关于抛出异常的更多信息,可能会用到另一个工具。

相关问题