之前,在網上查過許多資料!
發現在WinForm下能夠正常啟動並執行DLL,載入至Windows服務中後卻不能運行!
於是,我按照網上的方法開始了尋找解決方案之路.
1 使用進程
廢除傳統的Timer,用不太熟悉的 System.Threading.Thread 來代替!
關於進程的使用,並未太在意,儘管進程上有許多不合理的地方,我也沒有改動.
為的就是希望可以通過進程來在Windows服務中使用Process.
首先,定義全域變數:
private Thread MainThread;
其次,在建構函式中執行個體化.
// TODO: 在 InitComponent 調用後添加任何初始化
MainThread = new Thread(new ThreadStart(ThreadFunc));
MainThread.Priority=ThreadPriority.Lowest;
再次,定義進程方法
public static void ThreadFunc()
{
//擷取程式初始時間
DateTime lasttime = DateTime.Now;
// System.Threading.Thread.Sleep(20000);
//迴圈開始
while (true)
{
if (lasttime.AddMinutes(1) <= DateTime.Now)
{
lasttime = DateTime.Now;
//TODO
}
}
}
最後,在服務的 OnStart,和OnStop中,分別啟動和關閉進程.
MainThread.Start();
MainThread.Abort();
以上的一切操作完成後,我就馬上開始測試我的程式.
結果還是失敗了,我想看到的Process還是未啟動.
過了一晚,第二天繼續開始思考這個問題,後面我看到網上成功的例子時,想到:
是不是許可權的問題,是不是賬戶設定不對.
想到這裡,我將Accout=LocalService更改為Accout=LocalSystem!
運行程式!
Process啟動成功!
所以說,最重要的是賬戶問題!