前面寫了通常的寫.net服務 的方法。 其實也可以不用該工具來安裝服務,比如在一個Winform中點一個按鈕來實現安裝。 思路其實很簡單,你通過 System.Configuration.Install.ManagedInstallerClass 類中的靜態方法 InstallHelper就可以實現手工安裝。 該方法的簽名如下:
public static void InstallHelper(string[] args)
其中參數 args 就是你用 InstallUtil.exe 工具安裝時的參數。一般就是一個exe的文件名。
實現的步驟如下:
前3步和 前面寫的一樣,可以參考這裏 http://blog.csdn.net/lembo520390/archive/2009/06/02/4236379.aspx
接着你可以新建一個winform的項目,在上面放一個按鈕,按鈕的點擊事件代碼可以這樣:
view plaincopy to clipboardprint?
/// <summary>
/// 安裝服務
/// </summary>
private void btnInstall_Click(object sender, EventArgs e)
{
string[] args = { "myService.exe"};
ServiceController sCtr = new ServiceController(serviceName);
if (!ServiceIsExisted(serviceName))
{
try
{
ManagedInstallerClass.InstallHelper(args);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return;
}
}
else
{
MessageBox.Show("該服務已經存在,不用重複安裝。");
}
}
/// <summary>
/// 安裝服務
/// </summary>
private void btnInstall_Click(object sender, EventArgs e)
{
string[] args = { "myService.exe"};
ServiceController sCtr = new ServiceController(serviceName);
if (!ServiceIsExisted(serviceName))
{
try
{
ManagedInstallerClass.InstallHelper(args);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return;
}
}
else
{
MessageBox.Show("該服務已經存在,不用重複安裝。");
}
}
其中ServiceIsExisted 是判斷服務是否存在的方法,代碼如下:
view plaincopy to clipboardprint?
/// <summary>
/// 檢查指定的服務是否存在。
/// </summary>
/// <param name="serviceName">要查找的服務名字</param>
/// <returns></returns>
private bool ServiceIsExisted(string svcName)
{
ServiceController[] services = ServiceController.GetServices();
foreach (ServiceController s in services)
{
if (s.ServiceName == svcName)
{
return true;
}
}
return false;
}
/// <summary>
/// 檢查指定的服務是否存在。
/// </summary>
/// <param name="serviceName">要查找的服務名字</param>
/// <returns></returns>
private bool ServiceIsExisted(string svcName)
{
ServiceController[] services = ServiceController.GetServices();
foreach (ServiceController s in services)
{
if (s.ServiceName == svcName)
{
return true;
}
}
return false;
}
然後把前面生成的myService.exe和這個winform生成的可執行文件放到同一個目錄下,
運行winform點按鈕就可實現和運行 InstallUtil.exe 工具一樣的效果。
其實 InstallUtil.exe內部也是調用了ManagedInstallerClass.InstallHelper方法。 自己Reflector一下就知道了。:)
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/lembo520390/archive/2009/06/02/4236463.aspx