我有一个具有提升的用户权限(=以管理员身份运行)的 C# WInForms 客户端和一个 Windows 服务,如果用户意外退出客户端,它会自动重新启动该客户端。
如果客户端由用户启动,则一切正常。如果客户端是由服务(LocalSystem帐户)启动的,它不会按预期工作。
客户端应该调用名为gemcom的第 3 方可执行文件,而后者又调用另一个名为 rubylink 的可执行文件。对 Gemcom 的调用按预期工作,对 rubylink 的调用没有——但只有当客户端先前由 Windows Service 启动时。
Case 1: Client is started by User
A) client.exe is running in *John* account
B) gemcom.exe is called (runs in John account)
C) rubylink.exe is called (runs in John account)
--> OK!
Case 2: Client is started by Service
A) client.exe is running in SYSTEM account
B) gemcom.exe is called (runs in SYSTEM account)
C) rubylink.exe cannot be called
--> FAIL!
这里重要的是 gemcom(根据错误消息)可以看到 rubylink.exe 但它不能用它做任何事情,即它不能与它通信。
我对 gemcom 到 rubylink 的调用没有影响。这些都来自第 3 方供应商。这两个是在 1999 年用 C++ 编写的。
我在 Wind7/8 和 XP 上都观察到了这种行为。
有人会知道为什么吗?