专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

C自行实现安装卸载程序(不使用官方组件)

  正规软件建议还是使用官方的标准安装程序组件,因为官方的标准安装卸载组件能更好的与操作系统衔接,安装和卸载流程更加规范。
  今天提供一种野路子,全用代码实现安装卸载器。
  需要写一个程序,包含安装器、卸载器、主程序。
  在visualstudio中创建一个解决方案,解决方案里创建3个项目分别对应安装器、卸载器、主程序。
  如图
  制作安装包目录时,将三个项目全部生成可执行程序。然后按下方文件结构组织安装包,复制最终程序文件到相应位置。
  U8FileTransferIntaller
  U8FileTransfer
  main
  U8FileTransfer。exe
  。。。
  uninstall。exe
  intall。exe
  Installer生成install。exe,用于拷贝U8FileTransfer目录到用户选择的安装路径,注册表添加开机自启,启动U8FileTransfer。exe
  UnInstaller生成uninstall。exe,用于卸载程序(退出主程序,取消开机自启,删除main目录)
  U8FileTransfer是主程序。
  卸载时会删除main目录,uninstall。exe无法自动删除自己,需手动删除。
  下面只讲安装和卸载器的实现,不讲主程序。安装器
  功能:复制目录及文件,注册表添加开启自启,启动程序,关闭自身
  Intaller。cs代码:
  usingSystem;usingSystem。Collections。Generic;usingSystem。ComponentModel;usingSystem。Data;usingSystem。Drawing;usingSystem。Linq;usingSystem。Text;usingSystem。Windows。Forms;usingSystem。IO;usingMicrosoft。Win32;usingSystem。Reflection;usingSystem。Diagnostics;namespaceInstaller{publicpartialclassIntaller:Form{privatestringappDirNameU8FileTransfer;publicIntaller(){InitializeComponent();}summary复制目录(包括子目录及所有文件)到另一个地方summaryparamnamesourceDirNameparamparamnamedestDirNameparamparamnamecopySubDirsparamprivatevoiddirectoryCopy(stringsourceDirName,stringdestDirName,boolcopySubDirs){Getthesubdirectoriesforthespecifieddirectory。DirectoryInfodirnewDirectoryInfo(sourceDirName);if(!dir。Exists){thrownewDirectoryNotFoundException(Sourcedirectorydoesnotexistorcouldnotbefound:sourceDirName);}DirectoryInfo〔〕dirsdir。GetDirectories();Ifthedestinationdirectorydoesntexist,createit。Directory。CreateDirectory(destDirName);Getthefilesinthedirectoryandcopythemtothenewlocation。FileInfo〔〕filesdir。GetFiles();foreach(FileInfofileinfiles){stringtempPathPath。Combine(destDirName,file。Name);file。CopyTo(tempPath,true);}Ifcopyingsubdirectories,copythemandtheircontentstonewlocation。if(copySubDirs){foreach(DirectoryInfosubdirindirs){stringtempPathPath。Combine(destDirName,subdir。Name);directoryCopy(subdir。FullName,tempPath,copySubDirs);}}}文件浏览按钮事件privatevoidfolderBrowserButtonClick(objectsender,EventArgse){DialogResultdrfolderBrowserDialog。ShowDialog();if(drSystem。Windows。Forms。DialogResult。OK){folderPathTextBox。TextfolderBrowserDialog。SelectedPathappDirName;}}确认按钮事件privatevoidokButtonClick(objectsender,EventArgse){1。复制目录及文件stringsourceDirNameApplication。StartupPathappDirName;stringdestDirNamefolderPathTextBox。Text;directoryCopy(sourceDirName,destDirName,true);2。注册表添加开启自启RegistryKeykeyRegistry。LocalMachine。OpenSubKey(SOFTWAREMicrosoftWindowsCurrentVersionRun,true);if(keynull)如果该项不存在的话,则创建该子项{keyRegistry。LocalMachine。CreateSubKey(SOFTWAREMicrosoftWindowsCurrentVersionRun);}key。SetValue(appDirName,destDirNamemainU8FileTransfer。exe);key。Close();3。启动程序stringstartfolderPathTextBox。TextmainU8FileTransfer。exe;System。Diagnostics。Process。Start(start);关闭自身Application。Exit();}}}
  卸载器
  功能:退出运行中的主程序,删除注册表开机自启项,删除安装目录,弹出提示,退出自身
  Uninstall。cs代码:
  usingSystem;usingSystem。Collections。Generic;usingSystem。ComponentModel;usingSystem。Data;usingSystem。Drawing;usingSystem。Linq;usingSystem。Text;usingSystem。Windows。Forms;usingSystem。Diagnostics;usingMicrosoft。Win32;usingSystem。IO;namespaceUninstaller{publicpartialclassUninstall:Form{publicUninstall(){InitializeComponent();}privatevoidcancelButtonClick(objectsender,EventArgse){Application。Exit();}privatevoidconfirmButtonClick(objectsender,EventArgse){退出运行中的主程序Process〔〕processProcess。GetProcesses();foreach(Processprcinprocess){ProcessName为exe程序的名称,比如叫main。exe,那么ProcessName就为mainif(prc。ProcessNameU8FileTransfer){prc。Kill();break;}}删除注册表开机自启项打开注册表子项RegistryKeykeyRegistry。LocalMachine。OpenSubKey(SOFTWAREMicrosoftWindowsCurrentVersionRun,true);if(key!null){try{key。DeleteValue(U8FileTransfer);}catch(Exceptionex){MessageBox。Show(ex。Message);}}key。Close();删除目录DeleteDir(Application。StartupPathmain);弹出提示MessageBox。Show(以卸载完成,Uninstall。exe需要手动删除);退出自身Application。Exit();}summary删除文件夹summaryparamnamefile需要删除的文件路径paramreturnsreturnspublicboolDeleteDir(stringfile){try{去除文件夹和子文件的只读属性去除文件夹的只读属性System。IO。DirectoryInfofileInfonewDirectoryInfo(file);fileInfo。AttributesFileAttributes。NormalFileAttributes。Directory;去除文件的只读属性System。IO。File。SetAttributes(file,System。IO。FileAttributes。Normal);判断文件夹是否还存在if(Directory。Exists(file)){foreach(stringfinDirectory。GetFileSystemEntries(file)){if(File。Exists(f)){如果有子文件删除文件File。Delete(f);Console。WriteLine(f);}else{循环递归删除子文件夹DeleteDir(f);}}删除空文件夹Directory。Delete(file);}returntrue;}catch(Exception)异常处理{returnfalse;}}}}

五万以内摩旅神器骑摩托车去旅行是多么美的一件事,但是呢如何去选择一款适合自己的车这就是个问题,给大家推荐三款摩旅神器。第一款五羊本田CB400X(4。25W4。85W)此车为什么推荐首先本田的品质湖南省气象台发布高温黄色预警III级较重湖南省气象台2022年9月8日15时40分发布高温黄色预警预计8日20时至9日20时,长沙(雨花区高新区长沙县望城区天心区芙蓉区开福区岳麓区浏阳市宁乡市)株洲大部分地区(醴陵市天元苹果精准刀法切割!iPhone14系列发布,会跳动的刘海屏一年一度的科技界春晚在今天凌晨1点准时召开了,这次的发布会的产品也是相当丰富的。除了万众瞩目的iPhone14系列,还发布了三款AppleWatch产品和AirPodsPro2产品萝北高速高质发展答卷亮眼提气来源黑龙江日报太平沟五花山。大卫广场。张力摄五矿石墨调度指挥中心。小学校开展爱国主义教育活动。萝北口岸。萝北县中医院义诊活动。萝北县城区。过去的十年,萝北走过了极不平凡的奋斗历程。华为新机发布在即,你会期待吗?华为新机发布在即华为官宣9月6日发布!相比40,新增了哪些优势?1根据供应链消息华为已开始批量生产,整部手机采用曲面屏,其中的核心部件和技术的定位相应提高。并有望在新产品发布会上推锂行业分析报告锂盐供应端利润高增之后,可持续性与矿冶分化(报告出品方作者东证期货,陈祎萱)1引言随着各企业半年度业绩陆续披露,不难看出,当前锂电全产业链中,上游供应端充分受益于锂盐价格高增享有了最为丰厚的利润。那么站在当下,市场更为关注2022年办理退休,视同缴费年限如何认定,哪些人有视同缴费年限?视频加载中我国的养老保险制度各地开始的时间各不相同,最早1992年开始有养老保险个人账户,最晚可以到1998年。由于各地实施的时间不一样,导致视同缴费年限转移时产生了混乱,直到16疾驰汾酒陷入同室操戈,短期产能或陷困局山西汾酒迎来其史上最好半年报,然而,萧墙之内或许上演同室操戈,中汾酒业或成达尔摩斯之剑,让山西汾酒陷入短期产能短缺困局。作者老高(酒业资深从业者)2015年创办酒特卖至今,2006为啥理想ONE急于停产?了解下蔚小理最近的窘境,你会明白的蔚小理水逆的8月10677辆,同比增长81。69578辆,同比增长32。74571辆,同比下滑51。5。以上,分别是蔚小理三家在8月交出的成绩单,老实说,暗含不少唏嘘。过去一年,除在救援现场,太想让他们都活着泸定地震救援实录阿坝,汶川。四个字的标牌,异常醒目,被缝在橘黄色衣服的袖子上。穿着这身消防员衣服的救灾男孩张自立,正双手托抱着一个小婴儿。不熟练的姿势以及眼神里投射出的紧张,所有人都能看得出,他太王者1号更新,1传说1史诗返场,荣耀水晶双重打折,裴擒虎笑了大家好,这里峡谷热点报,将会给你带来王者荣耀最新的爆料内容。王者荣耀每周更新来了,这一次并没有新皮肤,不过官方给我们准备了一款限定史诗返场,和一个传说特效返场。目前来看,基本上可以
你会为孩子选择iPhone还是华为手机呢?感谢您的阅读!你会为孩子选择iPhone还是选择华为手机呢?我们在选择一款手机的时候,其实都会考虑到这款手机是不是适合我们的孩子使用。对于很多学生来说,其实手机的表现风格不同,不管为什么电视剧越来越没人看了?电视剧越来越没人看了,能够像以前打动人的电视剧越来越少了,搞笑的综艺娱乐节目越来越多了,还有就是手机又来越普及了,人们可以随时随地的找到自己找想要看的内容。电视剧没人看是必然的事。你买过最贵的衣服是什么,现在还在穿吗?我最贵的一件衣服是一件白貂,买了回家的路上耍手机刷到了养貂取皮的视频然后晚上跟我妈一起找了个地方把貂埋了念叨了一年,攒了俩月,一下没穿2017年在阿玛施买的一件风衣内挂皮草可拆卸,有哪些让你全程笑得停不下来的的电影?一提到喜剧,大部分人都会想到星爷周星驰,不过他的电影大家都熟记于心,在这就不过多推荐了。推荐几部国外让人笑破肚皮的电影吧。1尖声惊笑系列,一部以恶搞为己任的电影,里面恶搞了大量经典怀孕6个月宝宝查出是单脐动脉,宝宝能要吗,需要注意些什么?目前,产前筛查的手段越来越进步。部分准妈妈在做四维彩超的时候,会发现胎儿单脐动脉,也是胎儿常见的异常体征之一,胎儿有什么问题?点击关注三甲医院医学博士做悟空优质靠谱的健康问答1。什宝宝的脸蛋为什么不能乱捏和乱亲吻?先来说不要乱捏,一是婴幼儿的脸部皮肤是很娇嫩的,随便去捏,成人的指甲可能会划伤宝宝脸部皮肤,破相了。二是婴幼儿的脸颊下方有颊脂垫,是一种特殊的脂肪组织,能让脸看上去胖嘟嘟的,同时,刘诗雯为什么能战胜14战全胜的王曼昱,夺得全运会混双冠军?刘诗雯实力绝对没问题的,就是运气差点。然后心胸也大气。2012,2016,2021年,刘诗雯都曾有机会冲击奥运单打机会,结果3次都没成功。一到大赛不是出这问题就那意外,然后伤病越来二万五左右的预算买块什么样的手表比较好啊?两万五左右的预算可以买什么表?我第一个相当的品牌就是帝舵,这是一个被表迷们称为小劳力士的制表品牌,性价比超高。作为劳力士的附属品牌,帝舵主要是其低端市场的补充,不仅如此,帝舵表拥有鼻子痒是什么原因?鼻子痒是不少人都经历过的事情,尤其在干燥季节,鼻子痒得叫人难受,甚至有些人因为不舒服而用手指抠,结果导致鼻腔出血。那么,为什么会出现鼻子痒呢?一鼻子痒的原因。其实,鼻子发痒属于鼻炎哪个省卫视台收视率高,那这个省份经济一定很好,你认同吗?这个很难认同。目前省级卫视台收视率最好的是湖南省卫视,但湖南省的经济发展水平在全国来说只是中等水平,与广东,上海,浙江,江苏,山东,北京等有很大差距,甚至与它相邻的四川湖北都不如。刀郎爆红后,他怎么从神坛跌落了?万事万物都有高有低时,一点也不奇怪嘘刀郎当时确实是很火,以至于那两年几乎大街小巷都是的他的歌,但是说到神坛跌落的话,我觉得一是他的成就还不至于到了神坛的境界,他的歌也只是定义为当时
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网