2016-04-18 22 views
-1

.exeを作成するためにInstalledShieldを使用したセットアッププロジェクトの製品番号を取得する必要があります。Windowsセットアッププロジェクトから製品番号を読む

私は約を読んでいます。インストーラーAPIでMsiGetProductInfo()が見つかりましたが、これをサンプルコードC#で適用するためのものが見つかりませんでした。

ありがとうございました。

答えて

1

MsiGetProductInfoを参照していますので、exeがインストールするWindows Installer MSIファイル(前提条件がブートストラップされているため)と、セットアップをインストールした後に情報を取得すると仮定します。

これをp /署名を呼び出す:

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

と基本的に製品は、{}括弧で囲まれた文字列としてのGUID MSIの製品コードです。

あなたが行っている可能性のあるコードを投稿していないので、何か問題があると診断することは不可能です。 INSTALLPROPERTY_VERSIONSTRINGのようなものは、Windows SDKからmsi.hで定義されてい

https://msdn.microsoft.com/en-us/library/windows/desktop/aa370130(v=vs.85).aspx

は、値が「VersionStringている:「製品番号」でバージョンを意味する場合は、ここに文書化された値のいずれかを使用します"

も、この例では、十分な情報よりも多くのがあるはずです:

MSI Interop using MSIEnumRelatedProducts and MSIGetProductInfo

アップグレードが発生するとのUpgradeCodeは通常、多くの異なるProductCodesために同じままなので、あなたが使用している場合、コードはあまり変わりませんUpgradeCodeのMsiEnumRelatedProductsを使用してProductCodeを返し、そのProductCodeをMsiGetProductInfoに接続します。

+0

私は参考文献として以下を行っています.http://stackoverflow.com/questions/4013425/msi-interop-using-msienumrelatedproducts-and-msigetproductinfoしかし、ProductVersionを返しません.Itのみ商品名と製品コードを返します。 – KIS

+0

"ProductVersion"を "VersionString"に変更しました。それは製品のバージョンを返します。 – KIS

0

MsiGetProductInfoインストーラがWix Bootstrapperを使用して構築されているため、動作しません。あなたができることは、ちょっとハックですが、任意のアーカイバ(最後のアーカイブ)を使用して実行可能ファイルを開き、0というファイルを解析することです。これはXMLです。バージョン、製品名、プロダクトキーなどのすべての情報を見つけることができます。

+0

私はこのコードを実行する必要があります。あなたのアプローチでこれを行うことはできますか?ありがとう。 – KIS

+0

はい、アーカイバAPIがあります。あなたのために簡単なものを選択してください。 –

関連する問題