2010-10-26 31 views
8

Tôi đang sử dụng các sự kiện trước và sau khi xây dựng dịch vụ của mình để gỡ cài đặt và cài đặt dịch vụ. Vấn đề duy nhất là lần đầu tiên một nhà phát triển khác sử dụng sự kiện xây dựng trước nó không thành công vì dịch vụ chưa được cài đặt.Sử dụng InstallUtil để gỡ cài đặt dịch vụ không tồn tại

My hiện tại trước sự kiện xây dựng mà tháo gỡ là

%WinDir%\Microsoft.NET\Framework\v4.0.30319\InstallUtil /u $(TargetPath) 

Làm thế nào tôi có thể sử dụng để CHỈ gỡ bỏ cài đặt khi dịch vụ đã được cài đặt?

+0

Có lẽ tôi đang thiếu một cái gì đó, nhưng sẽ không phải là prebuild cũng không lần đầu tiên (hoặc bất kỳ thời gian ngay sau khi sạch) vì exe chứa các lớp cài đặt chưa được xây dựng chưa? –

+0

thats chính xác, nhưng tôi đã không được xây dựng lại hoặc làm sạch vì vậy nó được tốt. Nhưng bạn đưa ra một điểm tốt. –

Trả lời

14

Bạn có thể sử dụng công cụ Microsoft SC (Sc.exe) để truy vấn trạng thái dịch vụ hoặc thậm chí tạo hoặc xóa một dịch vụ. Dưới đây là một bài viết về việc sử dụng các lệnh này: http://support.microsoft.com/kb/251192

Từ một cửa sổ Command Prompt (nội dung sửa để nhấn mạnh):

C:\windows\system32>sc 
DESCRIPTION: 
     SC is a command line program used for communicating with the 
     Service Control Manager and services. 
USAGE: 
     sc <server> [command] [service name] <option1> <option2>... 

     The option <server> has the form "\\ServerName" 
     Further help on commands can be obtained by typing: "sc [command]" 
     Commands: 
     query-----------Queries the status for a service, or 
         enumerates the status for types of services. 
     queryex---------Queries the extended status for a service, or 
         enumerates the status for types of services. 
     start-----------Starts a service. 
     pause-----------Sends a PAUSE control request to a service. 
     continue--------Sends a CONTINUE control request to a service. 
     stop------------Sends a STOP request to a service. 
     delete----------Deletes a service (from the registry). 
     create----------Creates a service. (adds it to the registry). 

Chạy lệnh này để truy vấn một dịch vụ (A) tồn tại và (B) không tồn tại trong kết quả:

(A)

C:\Windows\System32>sc query W32Time 

SERVICE_NAME: W32Time 
     TYPE    : 20 WIN32_SHARE_PROCESS 
     STATE    : 1 STOPPED 
     WIN32_EXIT_CODE : 1077 (0x435) 
     SERVICE_EXIT_CODE : 0 (0x0) 
     CHECKPOINT   : 0x0 
     WAIT_HINT   : 0x0 

(B)

C:\Windows\System32>sc query nothere 
[SC] EnumQueryServicesStatus:OpenService FAILED 1060: 

The specified service does not exist as an installed service. 

Vì vậy, bạn có thể kiểm tra sự tồn tại của một dịch vụ trước khi cố gắng xóa nó bằng cách sử dụng sau - (tha thứ việc sử dụng thuần phong mỹ tục của CHO tuyên bố, tôi không chắc chắn chính xác làm thế nào để nắm bắt đầu ra của lệnh sc vào một biến hoặc sử dụng nó trong câu lệnh IF) -

set svcname=W32Time 
set svc=exists 
for /f "delims=" %%o in ('sc query %svcname% ^| find "FAIL"') do set svc=notexists 

if "%svc%"=="exists" sc delete %svcname% 
+0

Tôi đã chơi xung quanh với việc dừng lại và bắt đầu dịch vụ này để làm việc nhưng khôn ngoan khác nó đã được hoàn hảo. Cảm ơn –

+0

:) vui vì đã làm việc cho bạn – dh0well

0

Tôi đang sử dụng Visual Studio 2008 để xây dựng một dịch vụ và giống như bạn, tôi muốn cài đặt lại dịch vụ cho tôi khi tôi phải xây dựng lại nó.

prebuild tôi là

net stop P2PSN.Bridge.Service 
$(FrameworkDir)\installutil.exe /u $(TargetPath) 
Exit /b 0 

bài build của tôi là

$(FrameworkDir)\installutil.exe /ShowCallStack $(TargetPath) 
net start P2PSN.Bridge.Service 

Các "Exit/b 0" có nghĩa là, ngay cả khi dịch vụ không được cài đặt nó sẽ không thất bại. Tương tự như vậy nếu bạn chưa xây dựng dịch vụ, nó vẫn sẽ hoạt động. Sau lần đầu tiên cả hai lệnh này rõ ràng sẽ thành công.

Để thực hiện việc này, bạn PHẢI RUN STUDIO VISUAL với PERMISSIONS ELEVATED.

Hy vọng điều này sẽ hữu ích.

+0

Để sử dụng nó với .net 4.0, prebuild trở thành: – dmihailescu

0

Để xây dựng dựa trên giải pháp Jim Grimmett và sử dụng nó với .net 4.0 trước xây dựng trở thành:

net stop yourServiceName

% WinDir% \ Microsoft.NET \ Framework \ v4.0.30.319 \ InstallUtil/u "$ (TargetPath)"

Exit/b 0

và cho đăng bài build:

% WinDir% \ Microsoft.NET \ Framework \ v4.0.30319 \ InstallUtil/i "$ (TargetPath)"

net start yourServiceName

rem Exit/b 0

Đáng buồn $ (FrameworkDir) không mở rộng sang các .net 4,0 đường

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