![](/img/trans.png)
[英]Windows service fails to install for minor to major upgrade on Windows 8 in installshield
[英]windows 8 minor version returning 0 instead of 2
我有C ++代碼,其目的是查找Windows版本:
OSVERSIONINFOEX osvi;
BOOL bOsVersionInfoEx;
int iRet = OS_UNKNOWN;
ZeroMemory ( & osvi, sizeof ( OSVERSIONINFOEX ) );
osvi.dwOSVersionInfoSize = sizeof ( OSVERSIONINFOEX );
if ( !( bOsVersionInfoEx = GetVersionEx ( ( OSVERSIONINFO * ) & osvi ) ) )
{
osvi.dwOSVersionInfoSize = sizeof ( OSVERSIONINFO );
if ( ! GetVersionEx ( ( OSVERSIONINFO * ) & osvi ) )
return OS_UNKNOWN;
}
//the rest is irrelevant ...
iRet將返回一個內部枚舉值,用於標識Windows版本。 它將根據osvi.dwPlatformId,osvi.dwMajorVersion和osvi.dwMinorVersion中返回的值進行調整。
根據MSDN,對於Windows 8,MajorVersion的值為6,而MinorVersion的值為2。
我已將此代碼編譯到dll中,並且如果我從測試EXE程序調用DLL,則該代碼實際上可以工作。
但是,如果我從Windows安裝程序包(MSI)中的“自定義操作”中從相同的DLL調用相同的代碼,則GetVersionEx()為MinorVersion字段返回0。
還有其他人遇到此錯誤嗎? 有人知道如何解決嗎?
事實證明,在Windows 7+上使用GetVersion(Ex)時,默認情況下Windows Installer涉及該版本。 答案始終是Vista SP0。 您可以改用VersionNT MSI值。
來源: http : //blogs.msdn.com/b/cjacks/archive/2009/05/06/why-custom-actions-get-a-windows-vista-version-lie-on-windows-7.aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.