2009-02-24 10 views
14

Nie mam doświadczenia w pisaniu skryptów wsadowych, ale zastanawiałem się, czy istnieje sposób na zainstalowanie usługi Windows .NET przy użyciu installutil.exe przy użyciu takiego skryptu lub odinstalowanie usługi, jeśli jest już zainstalowany, najlepiej z pewnym potwierdzeniem, że faktycznie chciałbym wykonać deinstalację (np. naciśnij y, aby odinstalować).Skrypt wsadowy do instalacji lub deinstalacji usługi Windows .NET

Oto kilka szczegółów:

  • .exe za usługę znajduje się w katalogu C:\Program Files\Data Service
  • Skrypt powinien być w tym samym katalogu co plik .exe za usługę
  • Byłoby bądź miły, aby dodać prosty wiersz do pliku dziennika (będziemy go nazywać program.log, również w tym katalogu) po zainstalowaniu usługi
  • Na komputerze działa system Windows Server 2003 z .NET Framework zainstalowanym w domyślnym katalogu C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727

Jeśli uważasz, że można to zrobić w lepszy sposób, dobrze byłoby usłyszeć inne sugestie. Zawsze mogłem napisać instalator usług, ale nie jest to priorytetem.

Odpowiedz

13

Można skonfigurować usługę exe w celu obsługi samodzielnej rejestracji/wyrejestrowania za pomocą argumentów wiersza poleceń (-i -u itd.) Zamiast pisania pliku wsadowego, aby wykonać to samo.

Informacje na temat tworzenia Własna Instalowanie usługi w .NET

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

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

dodając także projekt instalacji do rozwiązania i posiadające Visual Studio zbudować pakiet zainstalować może być szybciej.

Jak utworzyć projekt konfiguracji dla usługi Windows w języku Visual Basic .NET lub Visual Basic 2005

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

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

+4

Zauważ, że Microsoft usunął typ projektu Instalator w Visual Studio 2012. –

0

Sugestie:

  • Korzystaj ze środowiska, system Windows może nie być zainstalowany w C :. Ale możesz użyć% WinDir%.
  • można przekierować echo do dołączania do pliku:

    echo wiadomość >> logfile.txt

  • Śledzenie wszystkiego i convering wszystkie przypadki brzegowe mogą być trudne w cmd.exe, to nie jest bogatym środowiskiem.

  • Nie ma spójnego miejsca na dokumentację. Ale pomoc (z wiersza poleceń) na "cmd", "jeśli", "na", "ustaw" i "zadzwoń" obejmuje znaczną część dostępnej składni.
  • Ustaw echo na początku, aby zobaczyć polecenia podczas ich wykonywania.
1

Nie jestem pewien, dlaczego potrzebny jest plik wsadowy dla jednej linijki. to właśnie bym użył.

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

27

Jest pliki wsadowe I wykorzystywane do zainstalowania.

@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 

odinstalować użyłem następujące:

@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

Dzięki ... działało idealnie – Lijo

+3

kiedy uruchomić plik wsadowy w trybie administratora 'PATH' odnosi się do 'C: \ Windows \ system32 \ service.exe', a nie ścieżkę, którą plik faktycznie istnieje, dlaczego? – Anoop

0

Zrobiłem to ze starej pliku wsadowego ....

skopiuj installutil.exe do tego samego katalogu, co plik wykonywalny (aby ułatwić to) Poniżej znajduje się ogólny przykład zawartości wymaganego pliku wsadowego: (moje były tylko nazwy 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 

Aby uzyskać więcej informacji na temat opcji wiersza poleceń dla installutil.exe, see here.

Aby odinstalować usługę, należy użyć innego pliku wsadowego z następujących treści:


installutil MyService.exe /u 

0

utworzyć plik z rozszerzeniem .bat i umieść to w pliku

installutil -uc: \ YourServiceLocation \ Service.exe

6

To jest ten, którego używam. Znalazłem to i używam go. Następnie do twórcy ..

@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

Łatwiej jest po prostu dokonać samodzielnej instalacji usług. Po zaimplementowaniu tego można uruchomić usługę exe bezpośrednio za pomocą przełącznika (/ i lub/u) lub zawijać wywołanie w pliku wsadowym, jeśli chcesz.

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); 
    } 
} 
+1

Ta sugestia jest znacznie łatwiejsza niż konieczność utrzymywania projektów konfiguracji lub skryptów wsadowych. – Xorandor

+1

Tak prosty! Dzięki –

+1

Jest to jeden z najbardziej atrakcyjnych postów, które przeczytałem! – Force

4

Znalazłem, że zawsze lepiej jest użyć dobrego projektu instalacji, który używa plików wsadowych do instalowania aplikacji. Są jednak takie sytuacje, że nie można tego zrobić. Kilka projektów w pracy powstało w czasach Windows NT i wczesnego Windows XP i używa prostych plików wsadowych do instalacji. W tym czasie konwertowanie pliku wsadowego na pakiet instalacyjny stanowi więcej problemów niż zwykła modyfikacja. Dzięki wielu poszukiwaniom odkryłem, że http://ss64.com/nt/ jest bardzo dobrym plikiem wsadowym Windows. (Po prostu jest to dziwne, z całym naszym postępem w dziedzinie technologii oprogramowania, aby napisać to ostatnie zdanie.)

W każdym razie, Happy Coding! - niezależnie od "języka".

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 

uruchomić ten plik bat jako administrator

Powiązane problemy