2013-10-02 120 views
0

我試圖以編程方式查詢安裝程序項目中的信息。這些信息在安裝程序中定義,我不想在代碼中複製它。我需要獲取Publisher安裝程序屬性(以及其他幾個),但似乎無法讓事情發揮作用。MsiGetProductInfo返回已安裝產品的ERROR_UNKNOWN_PRODUCT

我使用的查詢:

[DllImport("msi.dll", CharSet = CharSet.Unicode)] 
private static extern Int32 MsiGetProductInfo(
    string product, 
    string property, 
    [Out] StringBuilder valueBuf, 
    ref Int32 len); 

...

int length = 512; 
StringBuilder builder = new StringBuilder(length); 
var result = MsiGetProductInfo(
    "{censored}", 
    "Publisher", 
    builder, 
    ref length); 

使用regedit我可以看到一個卸載的產品:

{}審查_is1

這是我的應用程序與「發佈者」鍵,這是我所期望的。我不知道爲什麼「_is1」後綴在那裏。安裝程序是使用Inno Setup製作的,也許是相關的。我曾嘗試在MsiGetProductInfo調用中的產品代碼中添加此後綴,但它沒有任何作用。

調用返回1605,它是ERROR_UNKNOWN_PRODUCT。

如何正確查詢該產品的發佈者?

回答

2

MSI API僅適用於基於MSI的安裝。 Inno Setup不會創建MSI軟件包,因此無法使用MSI API來查詢有關Inno安裝程序的安裝信息。

+0

我想是時候添加註冊表鍵了。感謝鮑勃,我需要那個。 – PatrickV

相關問題