3

コマンドラインとカスタムのInnoSetupインストーラーを使用して、サードパーティのアプリケーションを正常にアンインストールできます。

コマンドライン実行:

MSIEXEC.exe /x {14D74337-01C2-4F8F-B44B-67FC613E5B1F} /qn

Inno Setupコマンド:

[Run]
Filename: msiexec.exe; Flags: runhidden waituntilterminated; 
Parameters: "/x {{14D74337-01C2-4F8F-B44B-67FC613E5B1F} /qn";
StatusMsg: "Uninstalling Service...";

次のC#コードをデバッグモードで実行すると、プログラムでアプリケーションをアンインストールすることもできます。

C#コード:

string fileName = "MSIEXEC.exe";
string arguments = "/x {14D74337-01C2-4F8F-B44B-67FC613E5B1F} /qn";

ProcessStartInfo psi = new ProcessStartInfo(fileName, arguments)
{
    CreateNoWindow = true,
    UseShellExecute = false,
    RedirectStandardOutput = true
};

Process process = Process.Start(psi);
string errorMsg = process.StandardOutput.ReadToEnd();
process.WaitForExit();

ただし、同じC#コードをコンパイルして展開したWindowsサービスとして実行すると、次のエラー出力が生成されます。

"This action is only valid for products that are currently installed."

追加コメント:

  • アンインストールコマンドを発行しているWindowsサービスは、デバッグモードでテストされているコードと同じマシンで実行されています。Windowsサービスは、ローカルシステムアカウントとして実行/ログオンしています。
  • アプリケーションログを調べて、実行されたコマンド引数がデバッグモードとリリースモードの両方で同じであることを確認しました。
  • イベントビューアに相談しましたが、手がかりがありません。

考え?どんな助けでも大歓迎です。ありがとう。

4

5 に答える 5

2

手順 1: MSI エラー ログ ファイルを確認する

あなたの問題は、LocalSystem として実行されていることが原因であると思われます。

ローカル システム アカウントは、たまたま管理者権限を持つ通常のユーザー アカウントとは異なります。ネットワークへのアクセスはなく、レジストリおよびファイル システムとのやり取りはまったく異なります。

メモリから、レジストリの下の「ホーム ディレクトリ」または HKCU への読み取り/書き込み要求は、実際にはデフォルトのユーザー プロファイル、または一時ディレクトリの場合は、c:\windows\temp

于 2008-09-10T23:34:31.293 に答える
2

過去にインストールで同様の問題に遭遇したことがあります。ある顧客が SYSTEM アカウントを使用してインストールしていたため、管理者以外のユーザーにあらゆる種類の権限の問題が発生していました。

アプリケーションが「インストール済み」と表示されない場合、MSI ログ ファイルは実際には役に立ちません。MSIINV.EXEシステム アカウントで の出力をキャプチャすることから始めることをお勧めします。これにより、現在インストールされているプログラムの「インベントリ」が得られます (またはそのユーザーがインストールしたもの) http://blogs.msdn.com/brada/archive/2005/06/24/432209.aspx

おそらく、製図板に戻って、アンインストールを行うために Windows サービスが本当に必要かどうかを確認する必要があると思います。まだ行っていない場合は、おそらくあらゆる種類の Vista UAC の問題に遭遇するでしょう...

于 2008-09-11T00:47:41.960 に答える
1

助けてくれた人に感謝します。これは権限の問題のようです。管理者アカウントで実行するようにサービスを更新したところ、サードパーティ アプリケーションを正常にアンインストールできました。Orion の指摘によれば、Local System アカウントはシステムへのフル アクセス権を持つ強力なアカウントですが ( http://technet.microsoft.com/en-us/library/cc782435.aspx )、持っていないようです。アンインストールを実行するために必要な権限。

[LocalSystem がインストール対象のアプリケーションをアンインストールできるという詳細については、追加のコメントを参照してください。]

于 2008-09-11T22:24:15.837 に答える
0

これは奇妙です。LocalSystem には間違いなくアプリケーションをインストールする権限があり (これが Windows Update と Active Directory でのソフトウェア展開のしくみです)、アンインストールもできるはずです。

アプリケーションは、最初はマシンごとではなく、ユーザーごとにインストールされているのではないでしょうか?

于 2008-09-12T02:32:46.380 に答える
0

@ポール・ラロンド

アプリのインストーラーは、カスタム InnoSetup インストーラー内にラップされています。InnoSetup インストーラーは、ログインしたユーザーによって手動で実行されます。つまり、アンインストールはローカル システム アカウントで実行されているサービスによってトリガーされます。

どうやら、あなたは何かに取り組んでいたようです。LocalSystem アカウントのインストールとアプリケーションのアンインストールでサービスを実行する簡単なテストをまとめましたが、すべて問題なく動作しました。あなたは正しかった。LocalSystem アカウントには、インストール先のアプリケーションのアンインストール アクセス許可が必要です。あなたはその日を救った。フィードバックをお寄せいただきありがとうございます!

于 2008-09-12T22:14:17.960 に答える