安装程序安装和卸载Windows服务的问题

IMGGTOO 2008-04-12 12:02:23
最近在vs2003环境写了一个Windows服务,想通过打包成安装程序的方式实现自动安装和卸载。
利用VS2003的安装程序向导,加上我的一些自定义操作,实现了服务的自动安装,方法如下:
在自定义操作的“安装”项中,自定义一个安装类重载Installer类的AfterInstall方法,在此方法中,执行“Installutil MyService.exe”安装服务。

为了实现服务的自动卸载,我又在自定义操作的“卸载”项中,自定义了一个新的安装类重载Installer类的BeforeUnInstall方法,想通过在此方法中执行“Installutil /u MyService.exe”来卸载服务。

但是,实际执行的时候,我发现,安装程序安装服务没有问题,但是卸载的时候,总是提示“文件不存在,卸载失败“。找了一些资料后才发现,VS2003的安装向导中,所谓的自定义操作,不管是“AfterInstall”还是“BeforeUnInstall”,其实都是Windows执行完默认的操作后才会被真正执行,也就是说,“BeforeUnInstall”实际上是在系统完成“UnInstall”之后而非之前执行。这样,卸载程序时,当执行到我自定义的“BeforeUnInstall”时,系统实际上已经完成了程序文件的删除工作,但是我自定义执行的服务卸载工作,必须依赖于这些程序文件的存在,所以才出现了“文件不存在,卸载失败”这样的错误。

不知大家有没有遇到过着类问题。我自己设想了两种解决办法:
1.找一种新的Windows服务卸载方法,这种方法是不依赖于服务程序可执行文件的存在的;
2.真正在Windows安装程序执行默认操作之前执行自定义操作;
但是都没有找到可行的实现途径。

我想,肯定还会有其他的办法,希望大家不吝赐教,谢谢!
...全文
884 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
suifengpiao1989 2012-07-16
  • 打赏
  • 举报
回复
henhao
ronaldor 2008-04-28
  • 打赏
  • 举报
回复
楼上说的问题是不存在的,卸载的时候自然在执行文件夹有文件
IMGGTOO 2008-04-14
  • 打赏
  • 举报
回复
ronaldor ,好办法!

但是,从安装包中抽取文件复制到执行文件夹,具体怎么实现,不知是否可以提供一些方法?
ronaldor 2008-04-14
  • 打赏
  • 举报
回复
visual studio 2003不记得什么样子了,不过在visual studio的安装程序里有个Custom Actions,
如果visual studio 2003也有这个功能,可以在Unstall项里添加可执行文件来执行删除文件前的操作
IMGGTOO 2008-04-14
  • 打赏
  • 举报
回复
谢谢楼上的兄弟。但是你好像是没有完全看懂我的帖子,所以,你提供的解决方法,暂时都还解决不了我的问题!
HarleyTung 2008-04-13
  • 打赏
  • 举报
回复
http://www.cnblogs.com/pcjim/archive/2007/11/14/959669.html
HarleyTung 2008-04-13
  • 打赏
  • 举报
回复
http://iiyi.gjjblog.com/archives/1049264/
HarleyTung 2008-04-13
  • 打赏
  • 举报
回复
http://www.52aya.com/downinfo/2099.html
HarleyTung 2008-04-13
  • 打赏
  • 举报
回复
http://xu20cn.blog.51cto.com/274020/69595
IMGGTOO 2008-04-12
  • 打赏
  • 举报
回复
我的安装程序制作过程同下面这个方法基本一致,可供大家参考:
http://joy777.bokee.com/5891363.html

110,533

社区成员

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

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

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