c#windfrom打包_C#打包安装Winform程序和打包安装windows服务

这里仅简单记录一下,自己备忘。至于能否给大家参考,请大家自行阅读。

需求:

1.目前有一个WinForm程序,需要制作安装部署程序

2.需要添加一个Windows服务用于监控Winform程序的进程,防止退出,并且在Winform的安装部署程序中也要安装此服务。

解决方法:

WinForm的Project就不说了。

Windows服务程序的添加和ProjectInstaller的添加

在sln下面新建一个Window服务程序,在Winfows服务是Service1的设计界面点击右键“添加安装程序”,添加一个ProjectInstaller

ProjectInstaller部分代码如下,在相应方法内写自定义操作的相关代码public partial class ProjectInstaller : System.Configuration.Install.Installer

{

public ProjectInstaller()

{

InitializeComponent();

this.serviceInstaller1.StartType = System.ServiceProcess.ServiceStartMode.Automatic;//设置服务为自动启动

this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalService;//设置服务安装指定的账号为本地系统

writeLog("xxxWindowsService ProjectInstaller run.");

}

public override void Install(System.Collections.IDictionary stateSaver)

{

base.Install(stateSaver);

}

protected override void OnAfterInstall(IDictionary savedState)

{

base.OnAfterInstall(savedState);

writeLog("enter OnAfterInstall ");

writeLog("leave OnAfterInstall ");

}

protected override void OnBeforeUninstall(IDictionary savedState)

{

base.OnBeforeUninstall(savedState);

writeLog("enter OnBeforeUninstall ");

writeLog("leave OnBeforeUninstall ");

}

安装项目的添加

sln右键添加新建项目-其他项目类型-安装和部署-Visual Studio Installer-安装项目。

在解决方案资源管理器点击Setup1,再点击vs2010工具栏的属性图标(ctrl+w,p),在弹出的属性框内设置Setup项目的相关属性,包括Auther,Manufacturer,productName等属性。

在解决方案资源管理器点击Setup1,再点击vs2010工具栏的属性图标(ctrl+w,p),在左侧设计界面弹出文件系统编辑器,点击应用程序文件夹,在中间窗口右键添加项目输出,添加安装程序所需的相关dll等文件。这里不再详细说具体的步骤了,网上baidu,google一大把。

现在说添加安装windows服务:

在文件系统编辑器中添加Window服务项目作为主输出后,Setup项目生成Setup文件安装时就会自动在安装Winform程序的时候安装Windows服务。

下面是如何在安装WindowsService过程中获取自定义参数的配置。

在解决方案资源管理器点击Setup1,再点击解决方案资源管理器顶部的自定义操作编辑器图标。

在自定义操作编辑器设计区域右键点击“安装”添加项目输出(这个项目输出要选中Windows服务那个项目)。

选中刚刚添加的项目输出,右键属性窗口,设置CustomActionData值为 /TARGETDIR="[TARGETDIR]\",注意,这里设置这个参数目的是能在Windows服务中的ProjectInstaller的方法中能获取到用户在安装过程中选中的安装程序路径。在ProjectInstaller中的OnAfterInstall方法中通过代码Context.Parameters.ContainsKey("TARGETDIR")获取到用户在安装过程中选中的安装程序路径。

右键点击“卸载”添加项目输出(这个项目输出要选中Windows服务那个项目)。重复上一步的操作设置属性相应值。

完整ProjectInstaller的代码如下:

[RunInstaller(true)]

public partial class ProjectInstaller : System.Configuration.Install.Installer

{

private string softWareMainFolder = "xxxMain";//Setup程序中配置的应用程序文件内自定义的主程序文件夹名

private string softWareServiceFolder = "xxxService";//Setup程序中配置的应用程序文件内自定义的服务程序文件夹名

private string serviceName = "xxxWinService";//服务名称

public ProjectInstaller()

{

InitializeComponent();

this.serviceInstaller1.StartType = System.ServiceProcess.ServiceStartMode.Automatic;//设置服务为自动启动

this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;//设置服务安装指定的账号为本地系统

writeLog(Environment.NewLine);//添加换行便于日志查看

writeLog("xxxWindowsService ProjectInstaller run.");

}

public override void Install(System.Collections.IDictionary stateSaver)

{

base.Install(stateSaver);

}

protected override void OnAfterInstall(IDictionary savedState)

{

base.OnAfterInstall(savedState);

//安装成功后更改服务配置文件中的被监控程序的路径

try

{

writeLog("enter OnAfterInstall ");

#region 测试自定义参数

writeLog("Context.Parameters.Keys.Co

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值