养生 装修 购物 美食 感冒 便秘 营销 加盟 小吃 火锅 管理 创业 搭配 减肥 培训 旅游

C#用Vs打包程序教程实现获取安装路径及卸载功能

时间:2024-09-24 16:30:30

VisualStudio2017&C#打包应用程序详细教程,并重写安装类获取安装路径,实现卸载功能,以及注册表的操作。

工具/原料

VisualStudio2017

win10x64

存在一个已完成的项目

Microsoftvs2017installer

方法/步骤

1、获取打包工具Microsoftvs2017installer,使用微软自带工具,获取步骤如下,若已安装请忽略此步。

C#用Vs打包程序教程实现获取安装路径及卸载功能

C#用Vs打包程序教程实现获取安装路径及卸载功能

2、安装完扩展以后,新建缬方焱蜱一个Setupproject项目。其中:“应用程序文件夹”即”Applica墉掠载牿tionFolder”表示要安装的应用程序需要添加的文件;“用户的‘程序’菜单”即”User’sProgramsMenu”表示:应用程序安装完,用户的“开始菜单”中的显示的内容,一般在这个文件夹中,需要再创建一个文件用来存放:应用程序.exe和卸载程序.exe;“用户桌面”即”User’sDesktop”表示:这个应用程序安装完,用户的桌面上的创建的.exe快捷方式。

C#用Vs打包程序教程实现获取安装路径及卸载功能

C#用Vs打包程序教程实现获取安装路径及卸载功能

3、建一个类库:解决方案->添加->新建项目-争犸禀淫>类库,命名为ClassLibrary,在项目ClassLibrary下面,删除Class1.cs,添加->糕恍阏绯新建项目->安装程序类(名称为InstallerDemo.cs),打开Installer,这个classInstaller继承自System.Configuration.Install.Installer,里面就一个构造函数。现在安装程序不能完成的功能,都可以在这个类写代码来自己实现。

4、重写安装函数BeforeInstall,AfterInsta盟敢势袂ll,AfterRollback,AfterUninstall芟坳葩津,BeforeRollback,BeforeUninstall等复制以下代码实现自定义操作:protectedoverridevoidOnAfterInstall(IDictionarysavedState) { LogWrite("OnAfterInstall!");stringpath=this.Context.Parameters["targetdir"];//获取用户设定的安装目标路径,注意,需要在Setup项目里面自定义操作的属性栏里面的CustomActionData添加上/targetdir="[TARGETDIR]\" LogWrite(path);//开机启动 RegistryKeyhklm=Registry.LocalMachine; RegistryKeyrun=hklm.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",true);try {//64位系统在计算机\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run LogWrite("设置注册表!"); LogWrite(path.Substring(0,path.Length-1)+@"BingPic\BingPic.exe"); run.CreateSubKey("Bing",true); run.SetValue("Bing",path.Substring(0,path.Length-1)+@"BingPic\BingPic.exe"); hklm.Close(); LogWrite("设置结束!"); }catch(Exceptionmy) { my.ToString(); LogWrite(my.ToString()); }base.OnAfterInstall(savedState); }publicoverridevoidInstall(IDictionarystateSaver) { LogWrite("Install!");base.Install(stateSaver); }protectedoverridevoidOnBeforeInstall(IDictionarysavedState) { LogWrite("OnBeforeInstall!");base.OnBeforeInstall(savedState); }publicoverridevoidUninstall(IDictionarysavedState) { LogWrite("Uninstall!");base.Uninstall(savedState); }publicoverridevoidRollback(IDictionarysavedState) { LogWrite("Rollback");base.Rollback(savedState); }publicvoidLogWrite(stringstr) {stringLogPath=@"c:\log\";using(System.IO.StreamWritersw=newSystem.IO.StreamWriter(LogPath+@"SetUpLog.txt",true)) { sw.WriteLine(DateTime.Now.ToString("[yyyy-MM-ddHH:mm:ss]")+str+"\n"); } }

5、添加主程序入口:“applicationfolder应用程序文件夹”–右侧空白处右键–“添加”–“项目输出”,选择ClassLibrary后确定,你会发现,在项目Setup1下面多了一项“主输出来自ClassLibrary(活动)”的字样

C#用Vs打包程序教程实现获取安装路径及卸载功能

C#用Vs打包程序教程实现获取安装路径及卸载功能

6、添加自定义操作:可以看到四个子项:安装,提交,回滚,卸载。在安装上面点击右键->添加自定义操作->选择“主输出来自ClassLibrary(活动)”。这样,重新生成后,安装之后就会执行OnAfterInstall代码了。

C#用Vs打包程序教程实现获取安装路径及卸载功能

C#用Vs打包程序教程实现获取安装路径及卸载功能

7、添加卸载程序:applicationfolder应用程序文件夹”–右侧空白处右键–“添加”–>文件:选路径c:\windows\system32\msiexec.exe

C#用Vs打包程序教程实现获取安装路径及卸载功能

C#用Vs打包程序教程实现获取安装路径及卸载功能

8、添加你的已存在项目文件:debug目录下的文件添加到应用程序文件夹里

C#用Vs打包程序教程实现获取安装路径及卸载功能

9、创建应用程序快捷方式,卸载快捷方式.并重命名为你希望的,剪切并黏贴到桌面文件夹和用户程序文件夹

C#用Vs打包程序教程实现获取安装路径及卸载功能

C#用Vs打包程序教程实现获取安装路径及卸载功能

C#用Vs打包程序教程实现获取安装路径及卸载功能

C#用Vs打包程序教程实现获取安装路径及卸载功能

10、添加卸载程序的配置:点击项目setup1,属性>-“ProductCode”复制给快捷方式的arguments属性

C#用Vs打包程序教程实现获取安装路径及卸载功能

C#用Vs打包程序教程实现获取安装路径及卸载功能

11、最后生成应用程序即可

C#用Vs打包程序教程实现获取安装路径及卸载功能

12、在文件夹中打开安装程序

C#用Vs打包程序教程实现获取安装路径及卸载功能

C#用Vs打包程序教程实现获取安装路径及卸载功能

一些问题总结

1、这个例子中在写入注册釉涑杵抑表时遇到了不少难题,其中一个很迷惑人的就是:System.UnauthorizedAccessException:无法写入到涛类唯鳙注册表项。解决方式:RegistryKeyrun=hklm.OpenSubKey(@”SOFTWARE\Microsoft\Windows\CurrentVersion\Run”,true);设为true,之后解决。

2、操作注册表时还有一个问题就是写入成功,找不到的问题在32位机裼沙钔炯上自启动路径位:计算机\HKEY_LOCAL_MACHIN呶蓟鹭毵E\SOFTWARE\Microsoft\Windows\CurrentVersion\Run64位:计算机\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run

© 一点知识