给定一个设置uiAccess =“true”的相应清单,如果win32程序(在其他Windows7系统上正常工作)能够在使用Parallels在Mac Mini上的Windows7(32位)上运行时从SetWindowsHookEx获得有效的句柄?
这是调用API的Delphi XE4代码行
HookHandle := SetWindowsHookEx(WH_JOURNALPLAYBACK, @Playback, hInstance, 0);
由于HookHandle中返回了系统错误,我一直收到“拒绝访问”。
我尝试了很多我的清单语法变体,并且非常想知道这是否只是Mac Mini / Parallels环境的一些限制。调用程序的用户是管理员。 UAC已启用。我试过以管理员身份运行;没有区别。
我的清单文件如下。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity type="win32" name="FFHotKeys" version="1.1.0.0 processorArchitecture="*"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="true"/>
</requestedPrivileges>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!--The ID below indicates application support for Windows 7 -->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
</application>
</compatibility>
</assembly>
我已尝试将这些级别设置为
level="asInvoker"
level="requireAdministrator"
level="highestAvailable"
并没有解决'拒绝访问'的问题。
注意:我通过包含
的.rc文件包含我的清单1 24 "FFHotKeys.exe.manifest"
而不是Project&gt;下的Custom Manifest功能。选项。我有“启用运行时主题”和一个空白的自定义清单。我尝试了另一种方式,但略有不同.manifest内容。
注意:当我使用XN_Resource_Editor检查资源时,有一个“XP Theme Manifest”资源,其中包含了预期的XML。还有2个VCLSTYLE资源。 谢谢。
答案 0 :(得分:1)
答案是肯定的,它应该并且确实适用于Parallels。
使用 XN_Resource_Editor 检查编译的EXE,澄清了问题。原来只删除了Project&gt;之前的.RES文件。构建导致资源被重新编译,因此测试结果令人困惑。更重要的是,当涉及RunTime主题时,Delphi XE4使用其默认清单。因此,解决方案是删除项目中的资源引用,而不是使用Project&gt;选项,应用程序,运行时主题,选择自定义清单,然后选择项目&gt;对EXE进行构建和代码签名,并从c:\ Program Files \ subdir。
下运行它processorArchitecture="*"
在清单中有效
<requestedExecutionLevel level="asInvoker" uiAccess="true"/>
在清单中有效。