簡體   English   中英

將WPF應用程序作為Windows服務運行

[英]Run a WPF Application as a Windows Service

我們正在開發一個Windows Presentation Foundation應用程序,我們希望它能夠作為Windows服務運行。

有人這樣做過嗎?
可能嗎?

我們不需要與桌面或任何GUI進行交互,只需要一個可以通過GUI,命令行(可以正常工作)或作為服務運行的應用程序就可以了。

期待有趣的輸入:-)

作為經驗法則,服務永遠不應該有任何類型的UI。 這是因為服務通常以非常高的權限運行,如果您對輸入不夠小心,可能會發生不好的事情。 (我認為最新版本的Windows根本不允許您從服務創建UI,但我不是100%肯定。)

如果您需要與服務進行通信,則應使用某種形式的IPC(WCF,管道,套接字......)。 如果你想要一個也可以作為服務的簡單控制台程序,我知道一個設置它的技巧:

class MyExampleApp : ServiceBase
{
    public static void Main(string[] args)
    {
        if (args.Length == 1 && args[0].Equals("--console"))
        {
            new MyExampleApp().ConsoleRun();
        }
        else
        {
            ServiceBase.Run(new MyExampleApp());
        }
    }
    private void ConsoleRun()
    {
        Console.WriteLine(string.Format("{0}::starting...", GetType().FullName));

        OnStart(null);

        Console.WriteLine(string.Format("{0}::ready (ENTER to exit)", GetType().FullName));
        Console.ReadLine();

        OnStop();

        Console.WriteLine(string.Format("{0}::stopped", GetType().FullName));
    }
    //snip
}

如果您剛啟動該程序,它將作為服務啟動(如果您從控制台運行它會對您大喊大叫),但是如果您在啟動時添加了參數--console ,程序將啟動並等待您點擊進入關閉。

我們實際上已經解決了,並寫了一篇關於它的帖子:
http://remy.supertext.ch/2011/11/a-wpf-project-running-from-the-cmd-prompt-or-as-a-service-and-has-a-gui/

也許它有助於某人。

不要這樣做。 將所有內容寫入引擎程序集,然后從GUI和服務引用它。 CLI可以是第三個可執行文件,也可以是服務可執行文件的重用。 關鍵是允許服務運行而不引用任何WPF或WinForms或您使用的任何GUI框架。

我的解決方案是添加一個Main入口函數,如:

public static void Main()
{
    ServiceBase.Run(new MyService());
}

現在我們有兩個應用程序啟動條目 - 一個用於WPF,另一個用於Windows服務。

我們可以在Visual Studio中配置啟動對象,方法是右鍵單擊項目並選擇Properties - > Application - > Startup object

設置條目和重建將獲得您想要的。

如果您已經從命令行使用它,那么就在那里。 有些應用程序只是在您希望將應用程序作為服務運行時使用簡單的標志名稱,請檢查這些標志並相應地使用邏輯流程。 就像是:

myapp.exe --runservice

看一下這個。 這使得任何可執行文件作為服務運行。

英語: http//support.microsoft.com/?scid = kb; en-us; 137890&x = 7&y = 13

法語: http//support.microsoft.com/kb/137890

暫無
暫無

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

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