2010-01-25 5 views
2

Windows 서비스 용 설치 프로젝트를 만들었습니다. 하지만 설치 프로그램을 제거하면 (프로그램 추가/제거 또는 VS - Uninstall에서 설치 프로젝트를 마우스 오른쪽 단추로 클릭하여) 프로젝트를 제거해도 서비스가 제거되지 않는 것입니다.C# Windows 서비스 제거 - 제거 프로그램 사용

명령 줄에서 sc delete를 사용하여이 작업을 다시 시작해야합니다.

내가 잘못 설정 한 적이 있습니까?

+0

우리의 조언이 어떤 도움을 제공하지 않았나요? @stackoverflow.com/questions/1560407/c-windows-service-not-appearing-in-services-list-after-install –

+0

@Jon Seigel, 내게 다른 질문처럼 보입니다. 원래 그는 서비스 패널에 자신의 서비스를 표시하는 방법에 대해 묻고있었습니다. 여기에서 그는 프로그램 추가/제거 목록 (또는 프로그램과 현재 호출 된 프로그램)에 프로그램을 표시하는 방법을 묻습니다. –

+0

음, 그렇습니다 -하지만 설치 제거에 대해서는 다루지 않습니다 ... Windows 2000의 경우 다시 시작해야합니다. -하지만 이것은 Windows 7입니다! – Alex

답변

0

설치 프로그램 프로젝트에서이 작업을 수행하는 쉬운 방법이 있는지는 잘 모르겠지만 여기서는 코드에서 수행하는 방법을 설명합니다. 우리 서비스는 명령 줄에서 "/ uninstall"을 전달할 때 내부적으로 제거를 수행합니다. (당신이 당신의 사용자 지정 작업에서 호출) 당신의 Installer 클래스에서

public static readonly string UNINSTALL_REG_KEY = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"; 
public static readonly string UNINSTALL_REG_GUID = "{1C2301A...YOUR GUID HERE}"; 

using (RegistryKey parent = Registry.LocalMachine.OpenSubKey(UNINSTALL_REG_KEY, true)) 
{ 
    try 
    { 
     RegistryKey key = null; 

     try 
     { 
      key = parent.OpenSubKey(UNINSTALL_REG_GUID, true); 
      if (key == null) 
      { 
       key = parent.CreateSubKey(UNINSTALL_REG_GUID); 
      } 

      Assembly asm = typeof (Service).Assembly; 
      Version v = asm.GetName().Version; 
      string exe = "\"" + asm.CodeBase.Substring(8).Replace("/", "\\\\") + "\""; 

      key.SetValue("DisplayName", DISPLAY_NAME); 
      key.SetValue("ApplicationVersion", v.ToString()); 
      key.SetValue("Publisher", "Company Name"); 
      key.SetValue("DisplayIcon", exe); 
      key.SetValue("DisplayVersion", v.ToString(2)); 
      key.SetValue("URLInfoAbout", "http://www.company.com"); 
      key.SetValue("Contact", "[email protected]"); 
      key.SetValue("InstallDate", DateTime.Now.ToString("yyyyMMdd")); 
      key.SetValue("UninstallString", exe + " /uninstallprompt"); 
     } 
     finally 
     { 
      if (key != null) 
      { 
       key.Close(); 
      } 
     } 
    } 
    catch (Exception ex) 
    { 
     throw new Exception(
      "An error occurred writing uninstall information to the registry. The service is fully installed but can only be uninstalled manually through the command line.", 
      ex); 
    } 
} 
2

, 당신은 UnInstall 메소드를 오버라이드 (override) 확인 및 서비스를 제거 <pathToFramework>\InstallUtil.exe /u <pathToServiceExe>를 호출합니다.

0

MDSN의 ServiceInstaller 문서를 살펴보십시오. System.Configuration.Install.Installer에서 상속받은 클래스를 추가하고 ServiceInstaller를 만들고 해당 ServiceInstaller를 Installers 속성에 추가합니다.

일단 설치 프로그램을 설치하면 설치 및 제거가 처리됩니다. 설치 프로그램 클래스의

예 :

/// <summary> 
/// The installer class for the application 
/// </summary> 
[RunInstaller(true)] 
public class MyInstaller : Installer 
{ 
    /// <summary> 
    /// Constructor for the installer 
    /// </summary> 
    public MyInstaller() 
    { 
     // Create the Service Installer 
     ServiceInstaller myInstaller = new ServiceInstaller(); 
     myInstaller.DisplayName = "My Service"; 
     myInstaller.ServiceName = "mysvc"; 

     // Add the installer to the Installers property 
     Installers.Add(myInstaller); 
    } 
} 
관련 문제