msiexec.exe作为卸载程序,卸载不完全,有残留文件,求解决方案

gaogar 2011-08-30 05:39:26
项目使用msiexec.exe作为卸载程序,卸载完成后,安装目录下还有残留文件,我是想把整个安装目录都卸掉,请问有没有方法可以做到呢?或者如何自己定制卸载程序呢?
...全文
1450 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
gaogar 2011-09-02
  • 打赏
  • 举报
回复
顶起!!~
gaogar 2011-09-01
  • 打赏
  • 举报
回复
顶起!!~
gaogar 2011-08-31
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zyloveyrf 的回复:]
LZ直接用360 强力删除,然后找到所在文件夹删除就OK了
[/Quote]
但客户不会想使用360才能卸载完成
萧炎 2011-08-31
  • 打赏
  • 举报
回复
LZ直接用360 强力删除,然后找到所在文件夹删除就OK了
gaogar 2011-08-31
  • 打赏
  • 举报
回复
由于我希望在程序安装运行完成后添加一些操作,所以我往项目中添加了一个专门的类库,在这个类库中添加了一个安装程序类,把这个类库一项目添加到安装包中,作为主输出。在卸载程序后,唯独是这个类库的DLL没有被卸载。
hen_ai_hen_ai_ni 2011-08-31
  • 打赏
  • 举报
回复
无数年前搜索到,没准对你有用,我照着做后,并未发现有什么残余文件,除非,这残余文件是你自动生成的

安装程序在vs.net是自带的,尤其是在.net2005中,非常方便,界面也比2003美观了许多。但是仍然存在的不方便的地方就是没有自带卸载程序,如果要求安装的人都从控制面板中去卸载,也太费劲了,所以今天上网找了找例子,发现了一些,所以一一记述下来。

方法一:利用msiexec.exe文件(一般在\winnt\system32目录下)。将该文件集成到安装文件目录中,然后选择安装项目的工程属性,找到Product Code一览,比如ProductCode {5284694C-24C1-4FCF-A705-D4B9A0081274},将这个{5284694C-24C1-4FCF-A705-D4B9A0081274}copy下来,然后在开始菜单中建立msiexec.exe的快捷方式,起个名字叫卸载,然后选择属性,在Argumengs一览中填写/x空格,然后把那个copy下来的ProductCode 复制到这里,就OK了,然后编译生成安装文件,试着安装一下,卸载程序就在开始菜单中了。用这个的好处呢就是方便,但是由于copy了一个和操作系统相关的msiexec.exe文件,所以仍然是不太合适。
方法二:1、先部署程序,记下程序的ProductCode 的值 ,例如:50026DC8-69DC-4B92-89CC-3D10AD4CA8C4
(选择解决方案资源管理器根目录如setup,再查看属性标签,不是右键中的属性)
2、建立1个新的winFrom程序
3、删除自动生成的form1。
4、添加个类,写入下面代码
using System;

namespace uninst
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
public class UnInstall
{
[STAThread]
static void Main(string[] args)
{
string sysroot = System.Environment.SystemDirectory;
System.Diagnostics.Process.Start(sysroot + "\\msiexec.exe", "/x {50026DC8-69DC-4B92-89CC-3D10AD4CA8C4} /qr");
//{50026DC8-69DC-4B92-89CC-3D10AD4CA8C4} 就是上诉的ProductCode
}
}
}
5、生成新的控制台程序
6、再把这个新的卸载程序添加到你的安装包里就行了。


方法三:1.用VS.net建立一个新的控制台程序uninst.exe文件,
'power by: landlordh
'for 2000,xp,2003
Module uninstall
Sub Main()
Dim myProcess As Process = New Process
If System.Environment.OSVersion.ToString.IndexOf("NT 5") Then
myProcess.Start("msiexec", "/X{2B65D4A9-C146-4808-AB4B-321FB0779559}") '改为自己的ProductCode
End If
myProcess.Close()
End Sub
End Module
2.将控制台程序BIN目录的exe文件加入到打包程序文件中
3.在程序组创建uninst.exe的快捷方式
isjoe 2011-08-31
  • 打赏
  • 举报
回复
msiexec.exe /x

这个程序只会卸载当初安装日志中指定的文件,后来新增的文件和文件夹是不能删除的。

你有时候会遇到卸载一些其他程序的时候,最后有个提示:某些文件未能删除,请手工删除 的提示。

你可以自己删除它。例如卸载后立即删除指定文件夹
gaogar 2011-08-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 yj258213056 的回复:]
如果你用的vs生成的安装包的话,有属性Premanent可以设置,卸载用msiexec.exe /x
[/Quote]
我就是用msiexec.exe /x这种形式卸载的,Premanent设为了True,也没有效果。
yj258213056 2011-08-31
  • 打赏
  • 举报
回复
如果你用的vs生成的安装包的话,有属性Premanent可以设置,卸载用msiexec.exe /x
gaogar 2011-08-31
  • 打赏
  • 举报
回复
顶起!!~~

111,083

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧