可以在台式机Delphi应用程序被认证为Windows 8(使用Windows应用程序认证工具包)?

2019-07-30 16:58发布

显然,德尔福(任何版本) 不支持安全异常处理程序 (在Visual Studio / SAFESEH开关)。 这导致一个警告在Windows 8使用Windows桌面应用程序认证工具包每时的认证要求为Windows 8桌面应用程序:

您的应用程序必须使用/ SAFESEH标志,以确保安全例外处理编译

显然,德尔福缺乏这种开关,因此它不能做。 我的问题是:

  1. 我的理解是正确的,即使该套件只显示一个警告(不会失败),因为这是一个“必须”的要求,今天任何Delphi应用程序不能被认证为Windows 8,因此不能被包含在Windows应用商店?

  2. 可以SAFESEH表的编制后,不知何故被加入到PE文件(例如,提取从地图文件或调试符号所需的信息),或我们绝对需要这样的编译器/连接支持,因此必须等到Embarcadero公司实现这个功能吗?

为了clearify,我的应用程序是Windows 32位桌面应用程序(兼容64位),而不是地铁的应用

Answer 1:

我不能回答的问题。然而,我很难想象,这个词的使用必须可能意味着该规则是可选的。

至于第二个问题,你需要从编译器/连接器的支持。 你不能合理地预期到后适应这种用PE后期编辑链接工具。 考虑下面的代码:

try
  Beep;
except
  on E: Exception do
    Writeln(E.ClassName, ': ', E.Message);
end;

编译器发出以下内容:

Project1.dpr.11: try
0041C3AA 33C0             xor eax,eax
0041C3AC 55               push ebp
0041C3AD 68C9C34100       push $0041c3c9 // exception handler is at $0041c3c9
0041C3B2 64FF30           push dword ptr fs:[eax]
0041C3B5 648920           mov fs:[eax],esp
Project1.dpr.12: Beep;
0041C3B8 6A00             push $00
0041C3BA E8E1CEFEFF       call MessageBeep
0041C3BF 33C0             xor eax,eax
0041C3C1 5A               pop edx
0041C3C2 59               pop ecx
0041C3C3 59               pop ecx
0041C3C4 648910           mov fs:[eax],edx
0041C3C7 EB59             jmp $0041c422
0041C3C9 E97291FEFF       jmp @HandleOnException
0041C3CE 0100             add [eax],eax
0041C3D0 0000             add [eax],al
0041C3D2 E42F             in al,$2f
0041C3D4 41               inc ecx
0041C3D5 00DA             add dl,bl
0041C3D7 C3               ret 
0041C3D8 41               inc ecx
0041C3D9 00A3D83E4200     add [ebx+$00423ed8],ah
Project1.dpr.15: Writeln(E.ClassName, ': ', E.Message);
........

现在,真正的异常处理程序HandleOnException ,在实施System.pas 。 但是,压入堆栈地址是$0041c3c9 ,地址地方到包含代码try/except块。 这意味着,为了创造一个SAFESEH PE部分中,您将需要找到每一个try/except在你的代码。 虽然这显然是可行的,我不认为这是容易处理。

我宁愿想象为x86编译器的SEH异常处理程序将只是_HandleXXX中声明功能System.pas 。 在这种情况下,这将是很容易的添加PE款上市只是这些功能作为一个链接后工序。 然而,由于每一个try/except都有自己的本地异常处理程序,我现在相信,只有编译器作者可以现实地希望加入SAFESEH PE部分。

还有就是,到目前为止,我所看到的,没有请求QC报告SafeSEH针对x86的Windows编译器的支持。 我建议你登录一个QC报告和官方支持的情况下。

更新:干得好@haimg的成功,我没和管理,以找到一个QC报告: QC#106781 。



Answer 2:

还有一些其他的因素,为什么德尔福申请不能被认证

http://delphitools.info/2012/08/23/why-no-native-winrt-support-in-delphi-xe3/



文章来源: Can a desktop Delphi application be certified for Windows 8 (using Windows App Certification Kit)?