8

アプリがあります。アプリをインストールするために、次のようなパラメーターを持つ単純な展開プロジェクトを使用しています。

DetectNewerInstalledVersion = true  
InstallAllUsers = true  
ProductCode = GUID (changing with version)  
RemovePreviousVersions = true  
UpgradeCode = GUID (Allways the same)  
Version = 1.0.5 (changing with each deployment).

問題は、このインストーラー (展開プロジェクト) が以前のバージョンを削除しないことです。それは一番上にインストールされ、ウィンドウは、プログラムの2つのバージョン(つまり、インストールしたアプリ)を持っていることを示していますが、テーマはどれも正しく機能しません。


編集
assemblyInfo: に 1 行追加しましたが、それでも何も変わりません。私の問題をより深く分析した後、インストーラーは Program Files フォルダー内のほとんどのファイルを変更しますが、デスクトップからアイコンを削除し、レジストリからレコードを削除することに気付きました。一番上にインストールした後、コントロールパネル->プログラム->プログラムと機能で表示できないため、アプリケーションを削除することさえできません。
上にインストールすると、プログラムを使用できません。しかし、プログラムファイルフォルダーから実行すると動作します(新しいバージョン)。2回インストールすると、すべて問題ありません(2回目のインストール中に、ウィザードがプログラムの修復または削除を求めます)。
今度は誰かが提案する何かを持っているかもしれませんか?
最終的なインストーラーはEXEファイルであるため、MSIファイルのソリューションは私には合いません。

4

2 に答える 2

0

私は同じ問題を抱えていました。新しいバージョンのインストーラーを呼び出す前に、古いバージョンをアンインストールすることで回避しました。

このコードは、ProductCode によってインストール済みの製品をアンインストールします。

  try
  {
     Process p = new Process();
     p.StartInfo.UseShellExecute = false;
     p.StartInfo.CreateNoWindow = true;
     p.StartInfo.FileName = "MsiExec.exe";
     p.StartInfo.Arguments = @"/x{53A13817-D52F-4F16-AE27-68D01DA0A656} /passive";
     p.Start();
     p.WaitForExit();
  }
  catch
  {
     MessageBox.Show("Unable to uninstall Application.  Manually uninstall/reinstall to update.");
  }

私の製品コードをあなたのものに置き換えることを忘れないでください. 良い点は、製品がインストールされていない場合は何もしないことです。

于 2013-02-11T21:18:26.710 に答える