【发布时间】:2017-10-17 09:08:16
【问题描述】:
我在从 Windows 服务启动进程时遇到了一种情况
_________
| | * Process 1
| Service | -------> * Process ...
|_________| * Process n
服务使用的代码如下:
ProcessStartInfo startInfo = new ProcessStartInfo(executablePath, commandlineArgs);
startInfo.WorkingDirectory = instancePath;
startInfo.UserName = userB;
startInfo.Password = passwordSecureString;
startInfo.Domain = domain;
startInfo.UseShellExecute = false;
Process process = new Process
{
StartInfo = startInfo,
EnableRaisingEvents = true,
};
process.Start();
现在,我有两个帐户 - 为简单起见,假设为 A 和 B。服务在第一个帐户下运行,并使用第二个帐户启动进程。
- 两个帐户都在本地管理员组中
- 两个帐户都有权作为服务登录
- 已启用辅助登录服务(以防万一)
- 操作系统:Windows Server 2012 R2。
下表应该表明在哪个帐户星座中会发生什么。
_______________
| | A | B |
|===+=====+=====|
| A | OK | X |
|---+-----+-----|
| B | X | OK |
|___|_____|_____|
- OK - 进程按预期启动
- X - 服务没有出错,但进程立即终止。
...这让我假设用户更改会导致问题。
发生异常的详细信息:
在阅读了错误代码 142 之后,这是我目前尝试过的:
- 不同的服务器
- Windows 更新
- 可再发行的 c++ 安装
- 咖啡,然后是烈酒,然后是咖啡
任何人都可以与这个问题联系起来吗?
【问题讨论】:
-
在会话 0 中运行并非设计为服务的程序从来都不是问题。 0xc0000142 的一个非常常见的原因是described here。
-
谢谢,汉斯。我不得不承认我还没有阅读链接的文章,但我会的。实际上,我忘了提到我还增加了非交互式桌面堆大小(如 [此处](blogs.msdn.microsoft.com/ntdebugging/2007/01/04/… ) 所示。
-
解释(嗯,有点)和解决方案可以在here
标签: .net authentication windows-services credentials windows-server-2012