2015-12-21 34 views
0

我寫在fasm中的應用程序,並確定Windows版本8.1和上限有問題。函數GetVersionExVersion Helper給我的Windows 8.正如MSDN所說,我必須通過更改Visual Studio中的清單文件來定位我的應用程序,但我沒有使用VS,所以我該怎麼辦?GetVersionEx函數爲Windows 8.1和上(fasm)

+0

請參閱[瞭解C/C++程序的清單生成](https://msdn.microsoft.com/zh-cn/library/ms235542.aspx)以開始工作。使用[/ MANIFESTINPUT(指定清單輸入)](https://msdn.microsoft.com/en-us/library/dn195770.aspx)鏈接器開關來嵌入清單。如果您使用FASM鏈接目標代碼,則必須指示它使用['resdata manifest'](http://flatassembler.net/docs.php?article=win32#1.8)嵌入資源)宏指令。 – IInspectable

+0

MSDN並沒有說你必須在VS中這樣做。 –

+1

Windows 8.1是'GetVersionEx()'行爲改變的版本。您必須顯示您的可執行文件,並指定該清單中特定操作系統版本的兼容性,以便'GetVersionEx()'正確報告這些版本號。這種行爲變化在MSDN上已有詳細記錄。 –

回答

2

任何允許您將資源鏈接到編譯的可執行文件的編程環境都可用於創建清單資源。您只需爲包含所需XML值的應用程序編寫合適的文件,然後將該文件的內容直接鏈接到應用程序的資源中,確保資源類型爲24,資源ID爲1,2或3(有關何時使用哪個ID的詳細信息,請參閱this page)。您無需爲此使用VisualStudio。

如果由於某種原因,你不能清單直接鏈接到你的應用程序的資源,你可以將XML或者保存到一個名爲<myappname>.exe.manifest(其中<myappname>是你的EXE文件的實際名稱)文件,並把它在同文件夾作爲你的應用。這不是顯示的首選方法,但它確實有效。

也就是說,您可以使用替代API而不是基於或VerifyVersionInfo()的幫助程序來獲取正確的操作系統版本,而無需處理任何顯示。也就是說,可以使用RtlGetVersion(),NetServerGetInfo()NetWkstaGetInfo()(並且它們都已經在Windows 8.1和10中測試過)。

0

清單文件是作爲Win32資源嵌入的XML文件。它也可以是名稱爲your.exe.manifest的外部文件。在互聯網上搜索示例內容的示例。