[转].NET安装项目卸载的方法

相信很多人都做过安装程序,目前最大功能最全的当属InstallShield,但是InstallShield的语法学习起来实在费劲,相对而言vs.net自带的安装部署短小精悍,且使用C#语法,对于一般C#开发者来说使用起来就极为简便,在对其作了一些研究之后,发现vs.net的安装部署项目的功能也已经非常好用,一般的程序安装都可以轻松实现,当然,在研究的过程中也发现了一些缺陷,最主要一个问题是安装后卸载不方便,一定要去控制面板里。可以按如下的方法解决,在程序里添加一个卸载的快捷方式。

1.新建一C# Windows From项目,完成项目的工作

2.菜单-》文件-》添加项目-》新建项-》安装部署项目-》安装向导

选择上面那个项目的主输出。

在安装项目的属性栏中会显示出"XXX部署项目属性",在第一个AddRemoveProgramsIcon属性后"浏览"到你的ICO图标,接着在下面Author输入作者名,也就是你的名字,其他Localization是语言属性,Manufacturer,ProductName的属性将是用户在安装时默认设置的文件夹路径一部分了,设置Title为你的应用程序标题名称。

3.右击"安装项目"上,选择文件系统视图

在应用程序文件夹,添加一个文件,如果是WIN98下的安装,请选择WIN98操作系统目录下的msiexec.exe文件(一般在c:\windows\system目录下);如果是其他,比如WIN2K系列,请选择该操作系统目录下的msiexec.exe文件(一般在\winnt\system32目录下)。

4.在文件系统视图的"用户程序菜单"里,添加一个目录,命名为项目的名字,

并且,在这个目录里,添加一个快捷方式,指向项目的主输出,

再添加一个快捷方式,指向加入的文件Msiexec.exe,命名为:"卸载",

5.在解决方案里,选择安装项目,再打开属性视图,打开安装项目的属性面板,里面有一项:

ProductCode  {5284694C-24C1-4FCF-A705-D4B9A0081274}

把后面的{5284694C-24C1-4FCF-A705-D4B9A0081274},复制一下。

6.在"卸载"快捷方式的属性里,有一个叫Arguments的属性栏,在属性栏中首先填入"/x"后加一个空格,再"粘贴",将ProductCode的属性值COPY至此。

7、再在VS.Net的顶部菜单栏中"生成"-"生成 XXXX"(XXXX为你的项目名称)

8、从微软网站上http://www.microsoft.com/downloads/直接下载Microsoft® .NET Framework 1.1 版可再发行组件包(dotnetfx.exe文件),COPY到您的发布生成的目录中,再放上你的安装说明及提示文件等。安装说明中提示用户首先安装dotnetfx.exe,再点击你的应用程序进行运行即可。

 

【2012年7月25日更新】

上面这种方式存在几个问题:

1、msiexec.exe文件在不同的操作系统兼容的问题。

2、如果用户直接点击程序安装目录的msiexec.exe文件无法删除,会跳出参数提示对话框

 

另一种解决办法是自己写一下程序调用系统的msiexec.exe文件,这样不管是点程序菜单里的卸载还是安装目录的文件都可以顺利删除掉。

操作步骤:

1、先部署程序,记下程序的ProductCode 的值 ,例如:B3E26570-5C9F-4699-ADB1-5E531699B1B2 (选择解决方案资源管理器根目录如setup,再查看属性标签,不是右键中的属性)
2、建立新的控制台程序 
3、添加个类,写入下面代码
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 + "file://msiexec.exe/", "/x {B3E26570-5C9F-4699-ADB1-5E531699B1B2} /qr"); //{B3E26570-5C9F-4699-ADB1-5E531699B1B2} 就是上诉的ProductCode
}
}
}
4、生成控制台程序
5、再把这个新的卸载程序添加到你的安装包里就行了。

posted @ 2008-03-11 11:00  小草  阅读(2656)  评论(0编辑  收藏  举报
Google+