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

Posted

技术标签:

【中文标题】无法以不同用户身份运行 C# 进程【英文标题】:Failing to run C# process as different user 【发布时间】:2014-09-28 16:15:37 【问题描述】:

我正在尝试使用不同的用户(而不是服务用户)从 C# 服务运行带有 System.Diagnostics.Processdjoin.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# 进程的主要内容,如果未能解决你的问题,请参考以下文章

c# .NEt 3.5 以用户形式运行进程时无法隐藏 CMD 窗口 - 窗体应用程序

在 ASP.NET 中以不同用户身份启动进程

如何在 C# 中创建一个没有密码的另一个用户的进程?

以 Windows 登录用户身份从服务启动进程

从以管理员身份运行的进程以用户身份启动进程

以与长时间运行的 Python 进程不同的用户身份运行子进程