你这样做AssignProcessToJobObject
了,它会因“拒绝访问”而失败,但只有在你在调试器中运行时才会失败。为什么是这样?
1800 INFORMATION
问问题
7465 次
2 回答
22
这让我困惑了大约 30 分钟。
首先,您可能需要在您的应用程序中嵌入一个 UAC 清单(如此处建议)。像这样的东西:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<!-- Identify the application security requirements. -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="asInvoker"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
其次(这是我坚持的一点),当您在调试器下运行应用程序时,它会在作业对象中创建您的进程。在您将其分配给您的工作之前,您的子进程需要能够脱离哪个。所以(duh),您需要 CREATE_BREAKAWAY_FROM_JOB
在标志中指定CreateProcess
)。
如果您没有在调试器下运行,或者您的父进程正在工作,则不会发生这种情况。
于 2008-09-18T02:52:38.640 回答
5
这似乎经常咬我,虽然很好,但 1800INFORMATION 的帖子似乎没有包含许多似乎有帮助的原因和修复,所以似乎值得发布我看到这种情况发生的原因的摘要。
- 在尝试自己解决此问题时,请注意,从 CMD.EXE、资源管理器和 Visual Studio 运行时,可能会出于不同原因出现此问题。尝试从各个位置运行失败的可执行文件有助于确定问题的原因。尽管 VS 和 Explorer.exe 失败,但您的应用程序可能只能从 CMD.EXE 中找到
- 就我而言,在 Win7 下,我似乎需要取消注释 app.manifest 文件中指示 Win7 兼容性的“supportedOS”元素。这似乎解决了从资源管理器运行时的问题。要添加清单,请右键单击项目,点击添加,然后找到“应用程序清单文件”。
- 为了让 Visual Studio 2010 正常工作,我似乎需要阻止它使用程序兼容性助手,Tom Minka 在这里分享了两种方法:https ://stackoverflow.com/a/4232259/86375 ,注意,我必须重新启动 VS2010 以接受他建议的更改。
于 2012-02-08T20:32:03.730 回答