0

既存のインストール シールド Bootstrapper を置き換える CustomBA を作成しています (名前がわかりません)。

インストールシールドが使用するのと同じ数の MSI をインストールしているので、問題ありません。MSI の Visible="no" を作成しているため、ARP のすべての MSI エントリが削除されます。

カスタム BA エントリのみが ARP で利用可能であり、両方とも同じ名前を持っています。

そのため、いくつかの調査の結果、Windows Installer XML (WiX) には、MSI のアンインストールに使用できる Deployment Tools Foundation (DTF) の一部として Microsoft.Deployment.WindowsInstaller 相互運用ライブラリが含まれていることがわかりました。

以下のコードを使用して MSI をアンインストールしています。

Microsoft.Deployment.WindowsInstaller.Installer.SetInternalUI(InstallUIOptions.Silent);
Microsoft.Deployment.WindowsInstaller.Installer.EnableLog(InstallLogModes.Info, @"C:\Uninstall.log");
Microsoft.Deployment.WindowsInstaller.Installer.ConfigureProduct(productCode, 0, InstallState.Absent, "");

私が直面している問題は以下のとおりです

  1. 最初に、CustomBA を管理者として実行して既存の MSI をアンインストールする必要があります。それ以外の場合は、「エラー 1730.You must be an Administrator to remove this application.」というエラーとしてスローされます。管理者なしで CustomBA を実行し、MSI をアンインストールする方法はありますか。

    1. アンインストール中(customBAを管理者として実行するとき)、上記のコードはチェーンパッケージも削除しますが、これは望ましくありません。

    2. アンインストール コードを実行しても、MSI エントリは ARP から削除されません。

これらのリンクを見つけましたが、関連性があるかどうかはわかりません : https://stackoverflow.com/questions/17523974/how-to-uninstall-msi-using-its-product-code-in-c-sharp アンインストールを成功させるために

4

1 に答える 1

1
  1. 管理者になる必要がある場合は、管理者になる必要があります。制限されたユーザーが、制限されているシステムの領域を変更できるようにすることは、セキュリティ違反になります。

  2. 「チェーン」という言葉を使用したため、InstallShield のセットアップは複数の MSI インストールであり、おそらく組み込みの UI が抑制されていたようです。そのため、以前の MSI は単一製品ビューとしてインストールされたようであり、単一製品ビューとしてもすべてアンインストールされているように見えます - それらはすべてアンインストールされます。それはおそらく最初の意図でした。複数の MSI を単一の製品として表示し、すべてがインストールされ、すべてがアンインストールされるようにすることです。また、IS のインストールが一連の MSI である場合、いずれにせよそれらすべてを交換 (またはアップグレード) することは間違いありません。それは、Burn と BA も行うことです。

  3. どの MSI の ARP エントリですか? ISによってインストールされたチェーン化されたMSIの1つを参照している可能性があると仮定すると、どのMSIがあなたの投稿から明らかではありません。そして、残っているのは MSI エントリであると確信していますか? MSI エントリではなく、InstallShield によってそこに配置されたチェーン製品のエントリである可能性があります。確かに、MSI のアンインストールが機能した場合、その ARP エントリは削除されますが、実際に削除されたことを確認するには更新が必要になる場合があります (ただし、これは Windows の問題です)。チェーン化された MSI 製品 (および多くの場合、Burn も) は、複数の MSI を含む単一のエントリを優先して、個々の MSI ARP エントリを抑制します。

于 2015-06-07T18:47:17.943 に答える