2009-02-24 176 views
14

我沒有經驗編寫批處理腳本,但我想知道是否有方法使用installutil.exe使用這樣的腳本安裝.NET Windows服務,或者卸載服務如果它已被安裝,理想情況下,我確實想要執行卸載(例如,按y卸載)。批處理腳本安裝或卸載.NET Windows服務

這裏還有一些細節:

  • 該服務的.exe文件位於C:\Program Files\Data Service目錄
  • 腳本應該是在同一個目錄中的.exe爲服務
  • 會在服務安裝完成後向日志文件中添加一條簡單的行(我們將其稱爲program.log
  • 該計算機正在運行Windows Server 2003,並在默認目錄中安裝了.NET Framework C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727

如果您認爲這可以做得更好,那麼聽聽其他建議會很好。我總是可以編寫一個服務安裝程序,但這不是優先事項。

回答

13

您可以使用命令行參數(-i -u等)設置您的服務exe以支持自注冊/註銷,而不是編寫批處理文件來執行相同的操作。創建自安裝服務在.NET

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

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

還加入了安裝項目,以您的解決方案,並具有Visual Studio中建立一個安裝包可能會更快

信息。

如何爲Windows服務在Visual Basic .NET或Visual Basic 2005

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

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

+4

注意,微軟刪除Visual Studio中的安裝項目類型2012 – 2013-05-06 15:44:08

0

建議創建安裝項目:

  • 利用該環境,Windows可能不會安裝在C:上。但是你可以使用%WinDir%。
  • 您可以重定向回聲附加到文件:

    呼應的消息>> LOGFILE.TXT一切

  • 飼養跟蹤和convering所有邊緣的情況下可以在cmd.exe的是具有挑戰性的,它並不是一個富有的環境。

  • 沒有一致的文檔記錄。但是,對「cmd」,「if」,「for」,「set」和「call」的幫助(來自命令行)涵蓋了很多可用的語法。
  • 在開始時設置回顯以查看執行時的命令。
1

我不知道爲什麼你需要一個班輪的批處理文件。這是我會用的。

C:\ WINDOWS \ Microsoft.NET \框架\ V2.0.50727 \ InstallUtil.exe /我ServiceAssembly.dll

27

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

@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 
+0

謝謝...非常完美 – Lijo 2013-04-19 12:59:11

+3

當我在管理員模式下的`PATH`運行批處理文件指的是`C:\ Windows \ system32 \ service。exe`而不是文件實際存在的路徑,爲什麼? – Anoop 2014-06-12 08:23:50

0

我這樣做是有一個老式的批處理文件....

複製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,see here命令行選項的詳細信息。

要卸載服務,使用不同的批處理文件,其內容如下:


installutil MyService.exe /u 

0

創建一個文件擴展名爲.bat,並將該文件

installutil在-uc:\ YourServiceLocation \ Service.exe

6

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

@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 
22

只是做自我安裝服務比較容易。一旦你實現了這個,你可以直接用(/ i或/ u開關)運行service 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); 
    } 
} 
4

我發現使用批處理文件安裝應用程序的好安裝項目總是會更好。有些時候,那是無法完成的。工作中的幾個項目是在Windows NT和早期的Windows XP中編寫的,並且使用簡單的批處理文件進行安裝。在那段時間,將批處理文件轉換爲安裝打包比單純調整更麻煩。通過大量搜索,我發現http://ss64.com/nt/是一個很好的Windows批處理文件參考。 (只是感覺很奇怪,隨着軟件技術的進步,我們必須寫出最後一句話。)

無論如何,快樂編碼! - 不管「語言」。

0
@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 

運行這個批處理文件以管理員身份