【发布时间】:2016-07-18 00:07:33
【问题描述】:
我们有一个作为 LocalSystem 运行的服务。我们使用 CreateProcessAsUser 和 LoadUserProfile 作为特定用户启动工作应用程序。效果很好。但是如果我们尝试使用 CreateProcessWithTokenW 来避免显式加载和管理用户配置文件,它会失败,并且在事件日志中记录以下内容:
Faulting application name: SomeApp.exe, version: 1.0.0.0, time stamp: 0x578a7819
Faulting module name: KERNELBASE.dll, version: 10.0.10586.494, time stamp: 0x5775e4c5
Exception code: 0xc06d007e
Fault offset: 0x0000000000071f28
Faulting process id: 0x24e4
Faulting application start time: 0x01d1df8d223316a6
Faulting application path: C:\SomePath\SomeApp.exe
Faulting module path: C:\Windows\system32\KERNELBASE.dll
Report Id: a2310c0d-7ddf-4241-92c9-de03e8de71e8
Faulting package full name:
Faulting package-relative application ID:
有什么技巧可以让 CreateProcessWithTokenW 工作吗?
【问题讨论】:
-
你想要什么?根据您的信息不可能给出答案。您需要粘贴一些代码或使用调试器查看错误的位置
-
我希望 CreateProcessWithTokenW 在 CreateProcessAsUser 所做的工作中取得成功。
-
当我们看不到您的代码时,无法告诉您为什么您的代码不起作用。请参阅 How to Ask 然后 edit 您的问题以包含 minimal reproducible example。
-
最可能的原因:根据文档,CreateProcessAsUser 将(默认情况下)根据用户令牌创建具有适当权限的新窗口站和桌面。 CreateProcessWithTokenW 的文档没有提到这一点,所以想必你需要自己做。 (假设这是问题所在,坚持使用 CreateProcessAsUser 可能会更容易。)
-
@Harry Jonston,这可以解释它。
标签: winapi createprocessasuser