簡體   English   中英

通過installutil安裝長期運行的服務時如何將參數傳遞給Configuration.Install.Installer

[英]How to pass arguments to `Configuration.Install.Installer` when installing a long-running service through `installutil`

我有一個要作為Windows Service運行的應用程序。 遵循此MSDN文檔頁面中提供的說明(我需要托管WCF服務,因此該過程還將詳細介紹此部分),我可以做到這一點,並且如果實現示例服務也可以。 我使用installutil.exe實用程序,可以將其應用程序安裝和卸載為Windows服務。

我的問題

但是,我需要在本地計算機上安裝同一應用程序的更多服務。 所以我需要給他們不同的System.ServiceProcess.ServiceBase.ServiceName s! 因此,請再次考慮安裝代碼:

[RunInstaller(true)]
public class ProjectInstaller : Installer {
    private ServiceProcessInstaller process;
    private ServiceInstaller service;

    public ProjectInstaller() {
        process = new ServiceProcessInstaller();
        process.Account = ServiceAccount.LocalSystem;
        service = new ServiceInstaller();
        service.ServiceName = /* NEED TO PUT HERE THE NAME!!! */;
        Installers.Add(process);
        Installers.Add(service);
    }
}

調用installutil.exe時,我可以通過一種方法來傳遞服務名稱嗎? 如何解決這個問題? 我還嘗試使用App.Config文件並執行以下操作:

public ProjectInstaller() {
    process = new ServiceProcessInstaller();
    process.Account = ServiceAccount.LocalSystem;
    service = new ServiceInstaller();
    service.ServiceName = System.Configuration.ConfigurationManager.
        AppSettings["SrvName"];
    Installers.Add(process);
    Installers.Add(service);
}

但是當然它不起作用,當應用程序運行時將調用該文件!!!

您可以打開配置文件以執行程序集。 如果您的安裝程序代碼放置在主服務exe文件中-這將是您的app.config。 否則,配置文件需要命名為[assemblyname] .dll.config。

process = new ServiceProcessInstaller();
process.Account = ServiceAccount.LocalSystem;
service = new ServiceInstaller();

var path = Assembly.GetExecutingAssembly().Location;
var config = ConfigurationManager.OpenExeConfiguration(path);
service.ServiceName = config.AppSettings.Settings["ServiceName"];
Installers.Add(process);
Installers.Add(service);

另外,本文還將說明如何通過命令行顯式傳遞installutil參數

面對這個問題,我首先在這里使用了這種方法:

但是,然后我又切換回一種架構,在該架構中,我只有一個服務來啟動可變數量的進程(在我的情況下,我使用zookeeper設置要運行的進程數及其命令行參數,但是如果這僅僅是一個問題的話)實例數, app.config很好)。

我以這種方式發現的主要優點是,啟動服務可以監視正在運行的子進程,例如,如果崩潰了,則可以重新啟動它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM