0

アプリ用の VS セットアップ プロジェクトを作成しました。アプリをユーザー定義の場所にインストールし、スタート メニューにいくつかのショートカットを作成します。また、コントロール パネルの [プログラムの追加と削除] に、アプリケーションのアンインストールに使用できるエントリを作成します。

アプリをアンインストールできるスタート メニュー エントリ (セットアップによって作成された他のエントリの隣) を作成する方法があるかどうかを知りたいです。

これまでのところ、1 つの解決策を見つけましたが、使用するのuninstall.batは面倒です。アプリ フォルダーに展開するファイルを作成し、このファイルにショートカットを追加しています。の内容は次の*.batようになります。

@echo off
msiexec /x {0B02B2AB-12C6-4548-BF90-F754372B0D36}

このソリューションについて私が気に入らないのは、アプリの製品コードを更新するたびに (VS が示唆するようにアプリのバージョンを更新するたびにそうしています)、セットアップ プロジェクトをビルドして次のように入力する前に、このファイルを手動で編集する必要があることです。新しい製品コードを修正します。

アンインストーラーをアプリに追加する簡単な方法を知っている人はいますか?

4

3 に答える 3

1

私はこの正確な問題を抱えていました。

私がしたことはこれでした:

  • uninstall.bat ファイルを提供します。このファイルは無条件にインストールされます
  • インストーラーでカスタム アクションを提供し、uninstall.bat ファイルを書き換えて、正しい製品コードを挿入します。

カスタム アクションとして実行されるスクリプトは次のとおりです。それは、uninstall.bat ファイルを書き換えてから、自分自身を削除します。

// CreateUninstaller.js
//
// Runs on installation, to create an uninstaller
// .cmd file in the application folder.  This makes it
// easy to uninstall. 
//
// Mon, 31 Aug 2009  05:13
//

var fso, ts;
var ForWriting= 2;
fso = new ActiveXObject("Scripting.FileSystemObject");

var parameters = Session.Property("CustomActionData").split("|"); 
var targetDir = parameters[0];
var productCode = parameters[1];

ts = fso.OpenTextFile(targetDir + "uninstall.cmd", ForWriting, true);


ts.WriteLine("@echo off");
ts.WriteLine("goto START");
ts.WriteLine("=======================================================");
ts.WriteLine(" Uninstall.cmd");
ts.WriteBlankLines(1);
ts.WriteLine(" This is part of MyProduct.");
ts.WriteBlankLines(1);
ts.WriteLine(" Run this to uninstall MyProduct");
ts.WriteBlankLines(1);
ts.WriteLine("=======================================================");
ts.WriteBlankLines(1);
ts.WriteLine(":START");
ts.WriteLine("@REM The uuid is the 'ProductCode' in the Visual Studio setup project");
ts.WriteLine("%windir%\\system32\\msiexec /x " + productCode);
ts.WriteBlankLines(1);
ts.Close();


// all done - try to delete myself.
try 
{
    var scriptName = targetDir + "createUninstaller.js";
    if (fso.FileExists(scriptName))
    {
        fso.DeleteFile(scriptName);
    }
}
catch (e2)
{
}

WiX でこれを行うこともできたと思いますが、学びたくありませんでした。

于 2009-10-12T19:13:35.300 に答える
1

.bat ファイルを編集して、引数を受け入れることができます。

@echo off
msiexec /x %1

ショートカットを定義するセットアップ プロジェクトで、[ProductCode] プロパティを引数として追加します。

于 2009-08-06T14:32:23.537 に答える
1

もう 1 つのオプションは、特定のコマンド ライン引数が指定されている場合、msiexec を呼び出してアプリケーション自体からアンインストールすることです。詳細については、ここに示す例を参照してください: http://endofstream.com/creating-uninstaller-in-a-visual-スタジオプロジェクト/

このようにすることで、アンインストール時にコマンドプロンプトを強制的に表示する必要がなくなります:)

于 2010-09-08T08:28:27.593 に答える