[英]Can 64bit Delphi desktop application be certified for Windows 8.1
[英]Can a desktop Delphi application be certified for Windows 8 (using Windows App Certification Kit)?
顯然,Delphi(任何版本) 都不支持安全的異常處理程序 (Visual Studio中的/ SAFESEH開關)。 在Windows 8上使用Windows桌面應用程序認證工具包時,這會導致警告。Windows 8桌面應用程序的認證要求如下:
您的應用必須使用/ SafeSEH標志進行編譯,以確保安全地處理異常
顯然,Delphi缺少此開關,因此無法完成。 我的問題是:
我的理解是否正確,即使套件僅顯示警告(不會失敗),因為這是“必須”的要求,所以當今任何Delphi應用都無法通過Windows 8認證,因此不能包含在Windows應用商店中?
是否可以在編譯后以某種方式將SafeSEH表添加到PE文件中(例如,從映射文件或調試符號中提取所需的信息),或者我們絕對需要對此提供編譯器/鏈接器支持,因此必須等到Embarcadero實現此功能?
為了明確起見,我的應用程序是Windows 32位桌面應用程序(兼容64位), 而不是Metro應用程序 。
我無法回答問題1。但是,我很難想象使用“ 必須 ”一詞可能意味着該規則是可選的。
對於問題2,您需要編譯器/鏈接器的支持。 您不能合理地期望通過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部分。
據我所知,沒有質量控制報告要求對x86 Windows編譯器提供SafeSEH
支持。 我建議您記錄一份質量控制報告和一個官方支持案例。
更新: @haimg在我失敗的地方成功並設法找到了QC報告: QC#106781,做得很好 。
還有其他因素導致無法批准Delphi的申請
http://delphitools.info/2012/08/23/why-no-native-winrt-support-in-delphi-xe3/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.