Windows 서비스 용 설치 프로젝트를 만들었습니다. 하지만 설치 프로그램을 제거하면 (프로그램 추가/제거 또는 VS - Uninstall에서 설치 프로젝트를 마우스 오른쪽 단추로 클릭하여) 프로젝트를 제거해도 서비스가 제거되지 않는 것입니다.C# Windows 서비스 제거 - 제거 프로그램 사용
명령 줄에서 sc delete를 사용하여이 작업을 다시 시작해야합니다.
내가 잘못 설정 한 적이 있습니까?
Windows 서비스 용 설치 프로젝트를 만들었습니다. 하지만 설치 프로그램을 제거하면 (프로그램 추가/제거 또는 VS - Uninstall에서 설치 프로젝트를 마우스 오른쪽 단추로 클릭하여) 프로젝트를 제거해도 서비스가 제거되지 않는 것입니다.C# Windows 서비스 제거 - 제거 프로그램 사용
명령 줄에서 sc delete를 사용하여이 작업을 다시 시작해야합니다.
내가 잘못 설정 한 적이 있습니까?
설치 프로그램 프로젝트에서이 작업을 수행하는 쉬운 방법이 있는지는 잘 모르겠지만 여기서는 코드에서 수행하는 방법을 설명합니다. 우리 서비스는 명령 줄에서 "/ 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);
}
}
, 당신은 UnInstall
메소드를 오버라이드 (override) 확인 및 서비스를 제거 <pathToFramework>\InstallUtil.exe /u <pathToServiceExe>
를 호출합니다.
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);
}
}
우리의 조언이 어떤 도움을 제공하지 않았나요? @stackoverflow.com/questions/1560407/c-windows-service-not-appearing-in-services-list-after-install –
@Jon Seigel, 내게 다른 질문처럼 보입니다. 원래 그는 서비스 패널에 자신의 서비스를 표시하는 방법에 대해 묻고있었습니다. 여기에서 그는 프로그램 추가/제거 목록 (또는 프로그램과 현재 호출 된 프로그램)에 프로그램을 표시하는 방법을 묻습니다. –
음, 그렇습니다 -하지만 설치 제거에 대해서는 다루지 않습니다 ... Windows 2000의 경우 다시 시작해야합니다. -하지만 이것은 Windows 7입니다! – Alex