我從來沒有做過可以作爲Windows服務或GUI運行的應用程序,但我們有很多應用程序可以使用編譯器標誌在控制檯應用程序和Windows服務之間切換。 (我剛剛看到了cmd行arg的答案 - 甚至可能會更好!)
我們通常只需使用編譯器標誌在兩者之間切換。下面是一個例子......我完全沒想到這通過,但它可能給你一個開始:
#define RUN_AS_SERVICE
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.ServiceProcess;
namespace WindowsFormsApplication1
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
#if RUN_AS_SERVICE
System.ServiceProcess.ServiceBase[] ServicesToRun;
ServicesToRun = new System.ServiceProcess.ServiceBase[]
{
new MyService()
};
System.ServiceProcess.ServiceBase.Run(ServicesToRun);
#else
// Run as GUI
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
#endif
}
}
public class MyService : ServiceBase
{
protected override void OnStart(string[] args)
{
// Start your service
}
protected override void OnStop()
{
// Stop your service
}
}
}
這個選項聽起來目前最有前途......但我需要做的不僅僅是停止,啓動和暫停服務。我需要能夠發送特定於服務的命令以使其執行其他操作,併發送命令以從服務中檢索數據... ServiceController可以執行此操作嗎? – 2009-02-20 01:07:01