0

インストーラー プロジェクトからの情報をプログラムでクエリしようとしています。この情報はインストーラーで定義されており、コードで複製したくありません。Publisher インストーラー プロパティ (およびその他のいくつか) を取得する必要がありますが、うまく動作しないようです。

私は以下を使用してクエリを実行しています:

[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

そして、これは私が期待する「Publisher」キーを持つ私のアプリケーションです。「_is1」サフィックスがある理由がわかりません。インストーラーは Inno Setup を使用して作成されているため、関連している可能性があります。MsiGetProductInfo への呼び出しで製品コードにこのサフィックスを追加しようとしましたが、効果がありませんでした。

呼び出しは 1605 を返しますが、これは ERROR_UNKNOWN_PRODUCT です。

この製品の発行者を正しく照会するにはどうすればよいですか?

4

1 に答える 1

2

MSI API は、MSI ベースのインストールでのみ役立ちます。Inno Setup は MSI パッケージを作成しないため、MSI API を使用して Inno Setup のインストールについてクエリを実行することはできません。

于 2013-10-02T22:38:50.977 に答える