0
我在我的MSI安裝程序中有屬性MYPATH,我正在向此路徑安裝一些組件。現在我想要獲取安裝組件的路徑。我使用下面的代碼:MSI獲取安裝屬性值C++
INSTALLUILEVEL pervousUILevel = MsiSetInternalUI(INSTALLUILEVEL_NONE, NULL);
MSIHANDLE handle = NULL;
MsiOpenProduct(productCode,&handle);
wchar_t myPath[2048];
DWORD dwBuffer = 2048;
MsiGetProductProperty(handle, L"MYPATH", myPath, &dwBuffer);
MsiCloseHandle(handle);
MsiSetInternalUI(pervousUILevel, NULL);
但我仍然得到默認值爲「C:\ MyDefaultPath」,而不是「C:\的路徑我指定在安裝過程中」。我究竟做錯了什麼?
感謝
編輯:
我發現代碼:
wchar_t myPath[4096];
DWORD isBuffer = 4096;
MsiGetComponentPath(productCode, L"{component-guid}", myPath, &isBuffer);
也返回的默認路徑。
你好波格丹,謝謝你的回覆!安裝過程完成後,有沒有辦法獲得這個屬性值,即在獨立的C++控制檯應用程序中?另一個想法讓我困惑的是,當我爲安裝到INSTALLDIR的組件獲取MsiGetComponentPath時,該函數爲我提供了安裝時選擇的INSTALLDIR。 – Marek
MsiGetProperty僅在安裝過程中起作用。要在安裝完成後獲取該值,您需要先將其保存在註冊表中,然後從中讀取。這就是爲什麼MsiGetComponentPath似乎是你所需要的。成本計算操作(CostInitialize - > CostFinalize)完成後,您可能會設置MYPATH的值,但我不能肯定地說,因爲我沒有使用太多的MsiGetComponentPath,所以我主要編寫在安裝過程中要執行的自定義操作處理。 –
我在執行MSI時直接發送MYPATH。感謝您澄清,這是不好的方式,我會從註冊表或一些配置文件讀取屬性。 – Marek