簡體   English   中英

用於安裝或卸載 .NET Windows 服務的批處理腳本

[英]Batch Script to Install or Uninstall a .NET Windows Service

我沒有編寫批處理腳本的經驗,但我想知道是否有辦法使用installutil.exe安裝 .NET Windows 服務,或者如果它已經安裝,則卸載該服務,理想情況下通過某種確認我實際上想要執行卸載(例如按 y 卸載)。

以下是一些細節:

  • 該服務的.exe 位於C:\Program Files\Data Service目錄中
  • 該腳本應與服務的 .exe 位於同一目錄中
  • 安裝服務后,最好在日志文件(我們將其稱為program.log ,也在此目錄中)添加一個簡單的行
  • 機器運行 Windows Server 2003,.NET Framework 安裝在默認目錄C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727

如果您覺得這可以以更好的方式完成,那么很高興聽到其他建議。 我總是可以編寫服務安裝程序,但這不是優先事項。

這是我用來安裝的批處理文件。

@ECHO OFF

REM The following directory is for .NET 2.0
set DOTNETFX2=%SystemRoot%\Microsoft.NET\Framework\v2.0.50727
set PATH=%PATH%;%DOTNETFX2%

echo Installing MyService...
echo ---------------------------------------------------
InstallUtil /i MyService.exe
echo ---------------------------------------------------
echo Done.
pause

要卸載我使用了以下內容:

@ECHO OFF

REM The following directory is for .NET 2.0
set DOTNETFX2=%SystemRoot%\Microsoft.NET\Framework\v2.0.50727
set PATH=%PATH%;%DOTNETFX2%

echo Uninstalling MyService...
echo ---------------------------------------------------
InstallUtil /u MyService.exe
echo ---------------------------------------------------
echo Done

只做自安裝服務更容易。 實現此功能后,您可以使用(/i 或 /u 開關)直接運行服務 exe,或者如果您願意,可以將調用包裝在批處理文件中。

static void Main(string[] args)
{
    if (args.Length > 0)
    {
        //Install service
        if (args[0].Trim().ToLower() == "/i")
        { System.Configuration.Install.ManagedInstallerClass.InstallHelper(new string[] { "/i", Assembly.GetExecutingAssembly().Location }); }

        //Uninstall service                 
        else if (args[0].Trim().ToLower() == "/u")
        { System.Configuration.Install.ManagedInstallerClass.InstallHelper(new string[] { "/u", Assembly.GetExecutingAssembly().Location }); }
    }
    else
    {
        System.ServiceProcess.ServiceBase[] ServicesToRun;
        ServicesToRun = new System.ServiceProcess.ServiceBase[] { new MyService() };
        System.ServiceProcess.ServiceBase.Run(ServicesToRun);
    }
}

您可以使用命令行 arguments(-i -u 等)設置您的服務 exe 以支持自我注冊/注銷,而不是編寫批處理文件來執行相同的操作。

在 .NET 中創建自安裝服務的信息

http://anotherlab.rajapet.net/2006/06/self-installing-services-in-net.html

http://www.gotnet.biz/WindowsServiceSelfInstaller.ashx

此外,將安裝項目添加到您的解決方案並讓 Visual Studio 構建安裝 package 可能會更快。

如何在 Visual Basic .NET 或 Visual Basic 2005 中為 Windows 服務創建安裝項目

(VB) http://support.microsoft.com/kb/317421

(C#) http://support.microsoft.com/kb/816169

這是我使用的那個。 我找到並使用它。 感謝創作者..

@echo off

SET PROG="YourServiceHere.exe"
SET FIRSTPART=%WINDIR%"\Microsoft.NET\Framework\v"
SET SECONDPART="\InstallUtil.exe"
SET DOTNETVER=2.0.50727
  IF EXIST %FIRSTPART%%DOTNETVER%%SECONDPART% GOTO install
SET DOTNETVER=1.1.4322
  IF EXIST %FIRSTPART%%DOTNETVER%%SECONDPART% GOTO install
SET DOTNETVER=1.0.3705
  IF EXIST %FIRSTPART%%DOTNETVER%%SECONDPART% GOTO install
GOTO fail
:install
  ECHO Found .NET Framework version %DOTNETVER%
  ECHO Installing service %PROG%
  %FIRSTPART%%DOTNETVER%%SECONDPART% %PROG%
  GOTO end
:fail
  echo FAILURE -- Could not find .NET Framework install
:param_error
  echo USAGE: installNETservie.bat [install type (I or U)] [application (.exe)]
:end
  ECHO DONE!!!
  Pause

我發現最好使用一個好的安裝項目來使用批處理文件來安裝應用程序。 雖然有些時候是做不到的。 工作中的幾個項目是在 Windows NT 和早期 Windows XP 時代編寫的,並使用簡單的批處理文件進行安裝。 在那些時候,將批處理文件轉換為安裝包比簡單的調整更麻煩。 通過大量搜索,我發現http://ss64.com/nt/是一個非常好的 Windows 批處理文件參考。 (感覺很奇怪,隨着我們在軟件技術方面的所有進步,不得不寫最后一句話。)

無論如何,快樂編碼。 - 無論“語言”如何。

我不知道為什么你需要一個批處理文件。 這就是我要使用的。

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe /i ServiceAssembly.dll

@echo off

SET PROG="c:\YourServiceLocation\Service.exe" SET FIRSTPART=%WINDIR%"\Microsoft.NET\Framework\v" SET SECONDPART="\InstallUtil.exe" SET DOTNETVER=4.0.30319 IF EXIST %FIRSTPART%%DOTNETVER%%SECONDPART% GOTO install

GOTO fail :install ECHO Found .NET Framework version %DOTNETVER% ECHO Installing service %PROG% %FIRSTPART%%DOTNETVER%%SECONDPART% %PROG% GOTO end :fail echo FAILURE -- Could not find .NET Framework install :param_error echo USAGE: installNETservie.bat [install type (I or U)] [application (.exe)] :end ECHO DONE!!! Pause

以管理員身份運行此 bat 文件

建議:

  • 利用環境,C:上可能安裝不了Windows。 但是你可以使用 %WinDir%。
  • 您可以將回顯重定向到 append 到文件:

    回顯消息>> logfile.txt

  • 在 cmd.exe 中跟蹤所有內容並轉換所有邊緣情況可能具有挑戰性,它不是一個豐富的環境。

  • 文檔沒有一致的地方。 但是關於“cmd”、“if”、“for”、“set”和“call”的幫助(來自命令行)涵蓋了大部分可用的語法。
  • 在開始時設置 echo off 以查看執行的命令。

我用一個老式的批處理文件做到了這一點......

將 installutil.exe 復制到與可執行文件相同的目錄中(為了使事情更容易)以下是必要的批處理文件內容的通用示例:(我的只是名稱 instal.bat)


installutil MyService.exe 
sc config MyService type= interact type= own
sc failure MyService reset= 6000  actions= restart/5000/restart/5000/restart/5000
sc start MyService 

有關 installutil.exe 命令行選項的更多信息,請參見此處

要卸載該服務,請使用具有以下內容的不同批處理文件:


installutil MyService.exe /u

創建一個擴展名為 .bat 的文件並將其放入文件中

installutil -u c:\YourServiceLocation\Service.exe

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM