我的软件总更新,所以每次更新后给客户安装,他总是提示有一个旧的版本,让客户自己卸载,客户闲麻烦,所以我想在安装我这个新版本前,自动卸载旧的,不知道旧版本和新版本哪里不一样?版本?不能呀?我该怎么改,才能让他自己卸载?于是我在 安装类里在安装前执行卸载
  protected override void OnBeforeInstall(IDictionary savedState)
        {
            
            base.OnBeforeInstall(savedState);
            xiezai();
        }private void xiezai()
        {            string sysroot = System.Environment.CurrentDirectory;
            System.Diagnostics.Process.Start(sysroot + "/msiexec.exe", "/x{2EFF8D5E-2E26-4AFC-8FC4-0E2B28B3AE19}");
        
        }可他还是提示有旧版本,然后就没执行这个,什么原因呀?还有什么更好的办法吗?

解决方案 »

  1.   

    是windows安装程序msi格式的吗?
    可以考虑在安装时候同时安装卸载程序Uninstall.exe
    在Uninstall.ini中保存了安装时的操作.
    Uninstall.exe撤销这些操作.
    当有新的安装的时候首先检测,如果有旧版本,则调用旧版本的Uninstall.exe
    完成卸载.最后安装新版本.
      

  2.   

    新版本和旧版本的ProductCode 和UpgradeCode  都是一样的吧?调用哪个Uninstall.exe 都一样吧?
      

  3.   

    我在哪里检测呀?void OnBeforeInstall也不灵呀?
      

  4.   

    曾经研究过,如果用同样的ProductCode,总是不能成功卸载。
    有个想法是,每次都用不一样的ProductCode, 然后通过寻找注册表信息来卸载不一样的版本,卸载的动作就放到一个dll里面做。
      

  5.   

    首先要知道你安装的软件是什么格式的,如果是msi的就比较容易了,找出这个软件的GUID。
    假设下面这个软件msxml sp2HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{F662A8E6-F4DC-41A2-901E-8C11F044BDEC}安装新的软件之前直接 调用系统命令
    msiexec /x {F662A8E6-F4DC-41A2-901E-8C11F044BDEC} /qb (/qn) 可以静默卸载关于这方面的问题欢迎和我来讨论