安装程序不删除以前的版本

JNM*_*JNM 6 c# installer windows-installer

我有一个应用程序.为了安装应用程序我正在使用一个简单的部署项目,其参数如下:

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

问题是,此安装程序(部署项目)从不删除以前的版本.它安装在顶部,Windows显示,我有我的程序的2个版本(即我安装的应用程序)但没有主题正常工作.


编辑
我在assemblyInfo中添加了一行:但它仍然没有改变.在更深入地分析我的问题之后,我意识到安装程序会更改Program Files文件夹中的大多数文件,但它会从Desktop中删除图标并从注册表中记录.安装在顶部后,我甚至无法删除应用程序,因为我无法在控制面板 - >程序 - >程序和功能中看到它.
如果我安装在顶部,我无法使用程序.但是,如果我从程序文件文件夹运行它(新版本).如果我安装两次,一切正常(第二次安装时,向导要求修复或删除程序).
也许这次有人还有别的建议吗?
MSI文件的解决方案不适合我,因为最终安装程序是EXE文件.

小智 0

我曾经也有过一样的问题。我通过在调用新版本的安装程序之前卸载旧版本来解决这个问题。

此代码将通过产品代码卸载已安装的产品:

  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.");
  }
Run Code Online (Sandbox Code Playgroud)

请记住将我的产品代码替换为您的产品代码。好的部分是,如果未安装该产品,它不会执行任何操作。

  • 我应该把这个放在哪里?在自定义操作中? (7认同)