c#开发的程序安装时动态指定windows服务名称
2023-06-13 09:14:34 时间
这下可把我难住了,难道要在开发的代码中一个一个地设置想要的名称,然后重新编译,再注册成服务?
但是如果将来又要换个名称呢?再重新设置、编译、注册一遍?这样操作太麻烦了!
于是我就想能不能通过在安装的时候进行配置,比如加一个xml文件记录要安装的服务的服务名等信息,每次安装前修改该xml文件就可以了。
操作:
1、首先添加一个配置文件到服务主程序的根目录,取名“ServiceSetting.xml”:
复制代码代码如下:
但是如果将来又要换个名称呢?再重新设置、编译、注册一遍?这样操作太麻烦了!
于是我就想能不能通过在安装的时候进行配置,比如加一个xml文件记录要安装的服务的服务名等信息,每次安装前修改该xml文件就可以了。
操作:
1、首先添加一个配置文件到服务主程序的根目录,取名“ServiceSetting.xml”:
<?xmlversion="1.0"encoding="utf-8"?>
<Settings>
<ServiceName>testme</ServiceName>
<DisplayName>testmedisplay</DisplayName>
<Description>这里仅仅是个测试而已</Description>
</Settings>
2、然后添加一个类文件到服务主程序的根目录,取名"SettingHelper.cs":
SettingHelper
#region文件描述
//-------------------------------------------------------------------------------------------------
//描述:服务安装配置帮助类
//作者:鲍昊晟
//时间:2012-05-10
//-------------------------------------------------------------------------------------------------
#endregion
usingSystem;
usingSystem.IO;
usingSystem.Xml;
///<summary>
///服务安装配置帮助类
///</summary>
internalclassSettingHelper:IDisposable
{
#region私有成员
privatestring_ServiceName;
privatestring_DisplayName;
privatestring_Description;
#endregion
#region构造函数
///<summary>
///初始化服务配置帮助类
///</summary>
publicSettingHelper()
{
InitSettings();
}
#endregion
#region属性
///<summary>
///系统用于标志此服务的名称
///</summary>
publicstringServiceName
{
get{return_ServiceName;}
}
///<summary>
///向用户标志服务的友好名称
///</summary>
publicstringDisplayName
{
get{return_DisplayName;}
}
///<summary>
///服务的说明
///</summary>
publicstringDescription
{
get{return_Description;}
}
#endregion
#region私有方法
#region初始化服务配置信息
///<summary>
///初始化服务配置信息
///</summary>
privatevoidInitSettings()
{
stringroot=System.Reflection.Assembly.GetExecutingAssembly().Location;
stringxmlfile=root.Remove(root.LastIndexOf("\\")+1)+"ServiceSetting.xml";
if(File.Exists(xmlfile))
{
XmlDocumentdoc=newXmlDocument();
doc.Load(xmlfile);
XmlNodexn=doc.SelectSingleNode("Settings/ServiceName");
_ServiceName=xn.InnerText;
xn=doc.SelectSingleNode("Settings/DisplayName");
_DisplayName=xn.InnerText;
xn=doc.SelectSingleNode("Settings/Description");
_Description=xn.InnerText;
doc=null;
}
else
{
thrownewFileNotFoundException("未能找到服务名称配置文件ServiceSetting.xml!");
}
}
#endregion
#endregion
#regionIDisposable成员
privatebooldisposed=false;
publicvoidDispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protectedvirtualvoidDispose(booldisposing)
{
if(!this.disposed)
{
if(disposing)
{
//manageddispose
_ServiceName=null;
_DisplayName=null;
_Description=null;
}
//unmanageddispose
}
disposed=true;
}
~SettingHelper()
{
Dispose(false);
}
#endregion
}
3、修改ProjectInstaller.cs文件,在修改构造函数publicProjectInstaller()如下:
ProjectInstaller
usingSystem.ComponentModel;
usingSystem.Configuration.Install;
namespaceWSInstallTest
{
[RunInstaller(true)]
publicpartialclassProjectInstaller:Installer
{
publicProjectInstaller()
{
InitializeComponent();
using(SettingHelpersetting=newSettingHelper())
{
serviceInstaller1.ServiceName=setting.ServiceName;
serviceInstaller1.DisplayName=setting.DisplayName;
serviceInstaller1.Description=setting.Description;
}
}
//endofclass
}
}
4、执行安装命令:
在开始菜单中找到“MicrosoftVisualStudio2008”-->“VisualStudioTools”-->“VisualStudio2008命令提示”,右键“以管理员身份运行”。
在命令行中输入以下命令:
SettingenvironmentforusingMicrosoftVisualStudio2008x86tools.
C:\Windows\system32>installutil/logfiled:\wsinstalltest.exe
5、当出现以下文字的时候就表明安装成功了
安装成功提示信息
Microsoft(R).NETFramework安装实用工具版本2.0.50727.5420
版权所有(C)MicrosoftCorporation。保留所有权利。
正在运行事务处理安装。
正在开始安装的“安装”阶段。
查看日志文件的内容以获得d:\wsinstalltest.exe程序集的进度。
该文件位于。
正在安装程序集“d:\wsinstalltest.exe”。
受影响的参数是:
logtoconsole=
assemblypath=d:\wsinstalltest.exe
logfile=
正在安装服务testme...
已成功安装服务testme。
正在日志Application中创建EventLog源testme...
“安装”阶段已成功完成,正在开始“提交”阶段。
查看日志文件的内容以获得d:\wsinstalltest.exe程序集的进度。
该文件位于。
正在提交程序集“d:\wsinstalltest.exe”。
受影响的参数是:
logtoconsole=
assemblypath=d:\wsinstalltest.exe
logfile=
“提交”阶段已成功完成。
已完成事务处理安装。
C:\Windows\system32>
可以进入“服务”程序中查看刚才安装的服务已经安装好了。
6、备注:
运行“scstarttestme”启动服务;
运行“scstoptestme”停止服务;
运行“scdeletetestme”删除服务。
相关文章
- 未能连接一个windows服务器,Win7出现未能连接一个Windows服务的解决办法
- C# textbox密码框设置[通俗易懂]
- C#中Dock属性的作用[通俗易懂]
- C#启动,停止Windows服务详解编程语言
- windows激活Windows:Linux下的秘诀(linux激活)
- 安装Oracle数据库:Windows系统必备技术(windows安装oracle)
- 安装Linux虚拟机:在Windows系统中的新体验(windows安装linux虚拟机)
- windows比较:Linux与Windows的优势对比(linuxvss)
- Linux与Windows:哪个更优秀?(linux好还是windows好)
- 和windows双系统安装:Linux与Windows并存(安装双系统linux)
- windows混搭环境中的EGL、Linux和Windows(egllinux)
- 双系统安装:Linux和Windows如何同时安装?(如何安装linux和windows双系统)
- MySQL在Windows下的离线安装(windows mysql)
- c#.NET中日志信息写入Windows日志中解决方案
- asp.net(C#)解析Json的类代码
- c#队列Queue学习示例分享
- c#socket编程udp客户端实现代码分享
- c#调用api控制windows关机示例(可以重启/注销)
- C#调用windowsapi关机(关机api)示例代码分享
- c#使用windows服务更新站点地图的详细示例
- C#中线程同步对象的方法分析
- C#转换日期类型实例
- 基于C#实现的仿windows左侧伸缩菜单效果
- 基于C#实现Windows服务状态启动和停止服务的方法