我的软件总更新,所以每次更新后给客户安装,他总是提示有一个旧的版本,让客户自己卸载,客户闲麻烦,所以我想在安装我这个新版本前,自动卸载旧的,不知道旧版本和新版本哪里不一样?版本?不能呀?我该怎么改,才能让他自己卸载?于是我在 安装类里在安装前执行卸载
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}");
}可他还是提示有旧版本,然后就没执行这个,什么原因呀?还有什么更好的办法吗?
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}");
}可他还是提示有旧版本,然后就没执行这个,什么原因呀?还有什么更好的办法吗?
可以考虑在安装时候同时安装卸载程序Uninstall.exe
在Uninstall.ini中保存了安装时的操作.
Uninstall.exe撤销这些操作.
当有新的安装的时候首先检测,如果有旧版本,则调用旧版本的Uninstall.exe
完成卸载.最后安装新版本.
有个想法是,每次都用不一样的ProductCode, 然后通过寻找注册表信息来卸载不一样的版本,卸载的动作就放到一个dll里面做。
假设下面这个软件msxml sp2HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{F662A8E6-F4DC-41A2-901E-8C11F044BDEC}安装新的软件之前直接 调用系统命令
msiexec /x {F662A8E6-F4DC-41A2-901E-8C11F044BDEC} /qb (/qn) 可以静默卸载关于这方面的问题欢迎和我来讨论