无法以不同用户身份运行 C# 进程
Posted
技术标签:
【中文标题】无法以不同用户身份运行 C# 进程【英文标题】:Failing to run C# process as different user 【发布时间】:2014-09-28 16:15:37 【问题描述】:我正在尝试使用不同的用户(而不是服务用户)从 C# 服务运行带有 System.Diagnostics.Process
的 djoin.exe
工具。
进程返回代码-1073741502
。
在事件日志中我可以看到:
应用程序弹出窗口:djoin.exe - 应用程序错误:应用程序是 无法正确启动 (0xc0000142)。点击确定关闭 应用。
没有标准错误或标准输出。
这是我使用的流程配置:
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
命令时,一切正常。
有什么问题?
【问题讨论】:
这是什么版本的 Windows?而且,您的应用是否具有提升的权限? Windows 2008 服务器 R2。这是一项服务。什么是提升权限? 该程序使用的其中一个 DLL 的 DllMain() 入口点返回 FALSE。很不高兴,你真的不知道为什么,除非它在应用程序事件日志中留下了一条消息。你会找到一个的可能性不大。尽管您绝对应该尝试将 LoadUserProfile 设置为 true,但您没有足够的旋钮来调整。请联系应用的作者或所有者寻求帮助。 @HansPassant djoin 似乎是标准的“内置”实用程序,是 Windows Server technet.microsoft.com/en-us/library/ff793312.aspx的一部分@ 【参考方案1】:似乎是权限问题。这可以在 exe 所在的文件夹级别,也可以与运行该进程的用户有关。
要诊断此问题,您可以先转到 exe 所在的文件夹。然后右键单击并将权限设置为具有完全控制权的“所有人”。然后尝试再次运行,看看是否收到相同的消息。
同样,当您运行 Visual Studio 时,在开始时,右键单击并以管理员身份运行。我从您的评论中得知这可以正常工作,这使我相信这实际上与许可有关。例如不同的用户是否在同一个域中?确定应用程序所在文件夹的权限后,创建一个对该文件夹具有权限的帐户,然后让任何进程计划/运行 exe 以在该帐户下执行。
更新 - 上面的 cmets 提示了另一个想法,您可以使用 system.diagnostics 在代码的每个点写入事件日志条目,以帮助确定出了什么问题。如果 WinDBG 获取有关引发该异常的更多信息,另一个可能有用的工具。
【讨论】:
以上是关于无法以不同用户身份运行 C# 进程的主要内容,如果未能解决你的问题,请参考以下文章