2009-02-24 44 views
14

Tôi không có kinh nghiệm viết tập lệnh theo lô, nhưng tôi đã tự hỏi có cách nào để cài đặt dịch vụ .NET Windows bằng cách sử dụng installutil.exe bằng cách sử dụng tập lệnh đó hay gỡ cài đặt dịch vụ nó đã được cài đặt, lý tưởng với một số loại xác nhận rằng tôi thực sự muốn thực hiện việc gỡ cài đặt (ví dụ: nhấn y để gỡ cài đặt).Batch Script để cài đặt hoặc gỡ cài đặt Dịch vụ Windows .NET

Dưới đây là một số chi tiết:

  • Các .exe cho dịch vụ nằm trong thư mục C:\Program Files\Data Service
  • Các kịch bản phải ở trong cùng thư mục với .exe cho dịch vụ
  • Nó sẽ hãy thêm một dòng đơn giản vào một tệp nhật ký (chúng tôi sẽ gọi nó là program.log, cũng trong thư mục này) sau khi dịch vụ được cài đặt
  • Máy đang chạy Windows Server 2003 với Khuôn khổ .NET được cài đặt trong thư mục mặc định C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727

Nếu bạn cảm thấy điều này có thể được thực hiện theo cách tốt hơn, thật tuyệt khi nghe các đề xuất khác. Tôi luôn có thể viết trình cài đặt dịch vụ nhưng đó không phải là ưu tiên.

Trả lời

13

Bạn có thể thiết lập exe dịch vụ của mình để hỗ trợ tự đăng ký/hủy đăng ký bằng các đối số dòng lệnh (-i -u etc) thay vì viết một tệp lô để thực hiện tương tự.

Thông tin về việc tạo ra dịch vụ tự cài đặt trong .NET

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

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

Cũng thêm một dự án Setup để giải pháp của bạn và có Visual Studio xây dựng một gói cài đặt có thể nhanh hơn.

Làm thế nào để tạo một dự án Thiết lập cho một dịch vụ Windows trong Visual Basic.NET hoặc Visual Basic 2005

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

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

+4

Lưu ý rằng Microsoft loại bỏ các loại dự án Setup trong Visual Studio 2012. –

0

Gợi ý:

  • Sử dụng môi trường, Windows có thể không được cài đặt trên C :. Nhưng bạn có thể sử dụng% WinDir%.
  • Bạn có thể chuyển hướng echo để nối thêm vào một tệp:

    vang Một thông điệp >> logfile.txt

  • theo dõi mọi thứ và convering tất cả các trường hợp cạnh có thể là một thách thức trong cmd.exe, nó không phải là một môi trường giàu có.

  • Không có nơi nhất quán cho tài liệu. Nhưng trợ giúp (từ dòng lệnh) trên "cmd", "if", "for", "set" và "call" bao hàm nhiều cú pháp avaialble.
  • Đặt echo ở đầu để xem các lệnh khi chúng được thực thi.
1

Tôi không chắc chắn lý do tại sao bạn cần tệp hàng loạt cho một lớp lót. đây là những gì tôi muốn sử dụng.

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

27

Đây là các tập tin batch tôi đã sử dụng để cài đặt.

@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 

để Gỡ bỏ tôi sử dụng như sau:

@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

Cảm ơn ... Làm việc một cách hoàn hảo – Lijo

+3

Khi tôi chạy tập tin thực thi trong chế độ quản trị 'PATH' đang đề cập đến 'C: \ Windows \ system32 \ service.exe' và không phải là đường dẫn tệp thực sự tồn tại, tại sao? – Anoop

0

Tôi đã làm điều này với một tập tin thực thi kiểu cũ ....

Sao chép installutil.exe vào thư mục tương tự như thực thi của bạn (để dễ dàng hơn) Sau đây là ví dụ chung về nội dung của tệp lô cần thiết: (tôi chỉ là tên 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 

Để biết thêm thông tin về tùy chọn dòng lệnh cho installutil.exe, see here.

Để gỡ bỏ cài đặt các dịch vụ, sử dụng một tập tin thực thi khác nhau với nội dung sau:


installutil MyService.exe /u 

0

tạo ra một tập tin với phần mở rộng .bat và đặt này trong file

installutil -uc: \ YourServiceLocation \ Service.exe

6

Đây là cái tôi sử dụng. Tôi tìm thấy nó và sử dụng nó. Thanx cho người sáng tạo ..

@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

Dễ dàng hơn khi thực hiện các dịch vụ tự cài đặt. Một khi bạn thực hiện điều này, bạn có thể chạy dịch vụ exe trực tiếp với (/ i hoặc/u switch), hoặc bọc cuộc gọi trong một tập tin thực thi nếu bạn muốn.

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

Đề xuất này dễ hơn rất nhiều so với việc phải duy trì các dự án thiết lập hoặc tập lệnh theo lô. – Xorandor

+1

Thật đơn giản! Cảm ơn –

+1

Đây là một trong những bài viết đẹp nhất mà tôi đã đọc! – Force

4

Tôi nhận thấy rằng tốt nhất nên sử dụng dự án cài đặt tốt để sử dụng tệp hàng loạt để cài đặt ứng dụng. Có những lúc điều đó không thể làm được. Một số dự án tại nơi làm việc được viết trong những ngày của Windows NT và Windows XP đầu tiên và sử dụng các tệp lô đơn giản để cài đặt. Trong thời gian đó, việc chuyển đổi tập tin thực thi thành một bản cài đặt được đóng gói sẽ gặp nhiều rắc rối hơn là một tinh chỉnh đơn giản. Thông qua tìm kiếm nhiều, tôi đã tìm thấy rằng http://ss64.com/nt/ là một tài liệu tham khảo tập tin lô hàng Windows rất tốt. (Nó chỉ cảm thấy kỳ lạ, với tất cả sự tiến bộ của chúng tôi trong công nghệ phần mềm, phải viết câu cuối cùng đó.)

Dù sao, Happy Coding! - bất kể "ngôn ngữ".

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 

chạy file bat này as administrator

Các vấn đề liên quan