4

InstallShield MSI プロジェクトがあります。InstallScript カスタム アクションから DotNetCoCreateObject() 経由で初期化されたマネージ アセンブリに MSIHANDLE を渡すと、マネージ コード内で受け取った値が -2 になります。

DotNetCoCreateObject() を介してマネージ コードを呼び出す InstallScript カスタム アクションから MSIHANDLE にアクセスできるかどうかを知っている人はいますか? カスタム アクションの結果を、残りのインストールと同じログ ファイルに記録したいと考えています。InstallShield 2010、Windows Install 4.5、および .Net 3.5 を使用しています。

4

3 に答える 3

4

これは、マネージド カスタム アクションを介してのみ可能であり、InstallShield の InstallShield.Interop.Msi.dll を使用して実際のハンドルを取得する必要があります。

管理されたカスタム アクションから MSI ログ ファイルに書き込むには、次のようにします。

 using (Msi.Install msi = Msi.CustomActionHandle(_msiHandle))
 {
     using (Msi.Record record = new Msi.Record(100))
     {
         record.SetString(0, "LOG: [1]");
         record.SetString(1, entry.Message);
         msi.ProcessMessage(Msi.InstallMessage.Info, record);
     }
 }

注: IS2010 の時点では、InstallShield.Interop.Msi.dll はデジタル署名されていないため、マネージ カスタム アクションを含むアセンブリも署名されていない必要があります。

于 2010-05-03T16:17:21.627 に答える
0

もう 1 つの明確化ポイントは、IS には InstallScript と MSI の 2 つのプロジェクト タイプがあることです。MSI プロジェクト内の MSI ハンドルにのみアクセスできます。

于 2009-12-12T20:57:04.543 に答える
0

いいえ、できません。ログ出力は自分で管理する必要があります。

于 2009-12-11T18:44:56.173 に答える