windows 窗體應用程序是在用戶登錄後才運行的。特別是對於服務器這種多用戶系統,盡管設置了開機自啟動,但是在程序運行過程中,運行改程序的用戶被注銷了,程序就關掉了。除非有人重新登錄或服務器重啟。
如果想要程序一直運行在服務器上,最好是把程序寫成windows服務程序。這樣程序會隨著系統的自動啟動而啟動,自動關閉而關閉,不需要用戶直接登錄,直接開機就可以啟動。
注意windows服務程序是沒有界面的,所以要定義日志文件保存運行過程中出現的問題。如果用到了定時器也要是系統的定時器。
下面示例如何建windows服務程序,以VS2013為例:
1. 建立windows服務

看看VS都生成了什麼

2. 重命名Service1,這個名稱是以後運行的windows服務的名稱,這裡改成SQLServerSyncService.cs
打開SQLServerSyncService.cs,添加後台代碼
namespace SQLServerSyncService
{
public partial class SQLServerSyncService : ServiceBase
{
private System.Timers.Timer timer1;//系統定時器
public int No = 0;
public SQLServerSyncService()
{
InitializeComponent();
}
protected void timer1_Tick(object source, ElapsedEventArgs e)
{
timer1.Stop();
int timek = 0;
OperatorDatatable test = new OperatorDatatable();
if (test.sw != null)
{
test.sw.WriteLine("第" + (No + 1).ToString() + "次同步數據庫錯誤信息:");
}
DateTime time1 = DateTime.Now;
try
{
if (test.ReadDataFromDatabase())
{
test.WriteDataToDatabase();
bool flag = false;
do
{
flag = test.DeleteSyncData();
Thread.Sleep(1000);
} while (!flag);
}
}
finally
{
test.DisposeAllResource();
test.CloseServer();
test.SaveLogFile();
DateTime time2 = DateTime.Now;
timek = (time2 - time1).Hours * 3600 + (time2 - time1).Minutes * 60 + (time2 - time1).Seconds;
}
No++;
timer1.Start();
}
protected override void OnStart(string[] args)
{
timer1 = new System.Timers.Timer();
timer1.Elapsed += new ElapsedEventHandler(timer1_Tick);
string timestr = XMLConfig.GetValue("appSettings", "add", "SyncInterval", "value");//同步時間間隔
timer1.Interval = (int)(float.Parse(timestr) * 60 * 1000);
timer1.AutoReset = true;//設置是執行一次(false)還是一直執行(true)
timer1.Enabled = true;//是否執行System.Timers.Timer.Elapsed事件
}
protected override void OnContinue()
{//服務恢復時
timer1.Enabled = true;
}
protected override void OnStop()
{
timer1.Enabled = false;
}
}
}
3.添加安裝程序,主要是為了設置windows服務程序,也可以自己寫代碼實現,但是何必呢。

右鍵

會出現兩個組件

右鍵serviceInsraller1,選擇屬性,將ServiceName的值改為SQLServerSyncService。(此名稱是以後服務的名稱)

右鍵serviceProcessInsraller1,選擇屬性,將Account的值改為LocalSystem。

生成解決方案,最後把生成的exe程序拷貝到方便記的目錄。次目錄是後續安裝生成的服務的路徑。
4.安裝該服務程序。 打開VS開發人員命令提示工具,注意要以管理員的身份運行,否則會報錯:Windows服務安裝異常:System.Security.SecurityException: 未找到源,但未能搜索某些或全部事件日志。不可 訪問的日志: Security
輸入命令InstallUtil.exe C:\Server\SQLServerSyncService.exe, 回車

5.服務程序安裝好了,啟動就好了
在上面的VS開發人員調試工具或者DOC下面輸入services.msc,回車彈出服務對話框,找到我們的服務程序,啟動就可以了
