• 2

c# 在windows服務問題需要執行外部程式問題?

請問...

c# 在windows 服務裡,我需要用到外部程式winrar 來進行壓縮作業....
不過很奇怪,用win 7/8測試都是ok的,但在winxp沒有任何錯誤訊息,也都可以安裝該service上去,但就是不會工作?不知是什麼問題?


namespace WindowsService1
{
public partial class Service1 : ServiceBase
{
private Timer MyTimer;

public Service1()
{
InitializeComponent();
}

protected override void OnStart(string[] args)
{
MyTimer = new Timer();
MyTimer.Elapsed += new ElapsedEventHandler(MyTimer_Elapsed);
MyTimer.Interval = 60* 60 * 1000; // 1hr
MyTimer.Start();
}

private void MyTimer_Elapsed(object sender, ElapsedEventArgs e)
{
System.Diagnostics.ProcessStartInfo Info = new System.Diagnostics.ProcessStartInfo();

Info.FileName = "winrar.exe";
Info.Arguments = "a c:\\ttt\\vb d:\\vb\\tmp\\*.*";

Info.WorkingDirectory = "C:\\Program Files\\WinRAR\\";
System.Diagnostics.Process Proc;

//test
Process p = Process.Start("notepad.exe");
p.WaitForExit();


Proc = System.Diagnostics.Process.Start(Info);
Proc.WaitForExit();

}

}

protected override void OnStop()
{
MyTimer.Stop();
MyTimer = null;
}
}
}

2015-05-01 23:43 發佈

chengmou wrote:
請問...
c# 在windows...(恕刪)

我沒用c#,但網路潛水爬文結果,印象中c#在xp跑要用.net 4.0不是.net 4.5
start沒用時可考慮改用shell,或是直接跑bat或vbs

nwcs wrote:
我沒用c#,但網路...(恕刪)


謝謝 nwcs 大大提示....

我是改用framework 4.0 ,用net start service 並沒有出錯誤訊息,是成功的...
可是就是不工作....xp下
shell 要研究一下下...

tks...

chengmou wrote:
謝謝 nwcs 大大...(恕刪)

猜測之詞:
1.xp 是否不須用\\,而直接用\即可
2.是否寫要把兩邊的"加進去,變成"""C:\Program Files\WinRAR\"""
也可使用winrar免安裝版,直接把winrar.exe放在c:\winrar目錄下,可避開目錄空白字元的問題
你的情形,我會請你直接先建好.lnk or batch,確認結果無誤後,再去試著用start or shell.


寫程式最好理解一下含意喔!不然會遇到很多問題。

Info.Arguments = "a c:\\ttt\\vb d:\\vb\\tmp\\*.*";

這行代表 winrar.exe "a" "c:\ttt\vb" "d:\vb\tmp\*.*"

放兩個\\代表的是\而已,因為程式裡面\代表特殊字元,常見的有

\t 表示 tab
\n 代表 換行(linux)

代表 換行(windows)
...略

如果你要寫成一個\也可以改成

Info.Arguments = @"a c:\ttt\vb d:\vb\tmp\*.*";

在字串開頭加上@符號


你卡住的原因因該是,以下兩行

Process p = Process.Start("notepad.exe");
p.WaitForExit;

這兩行表示啟動notepad.exe就是記事本,但是你用WindowsService,因為是背景服務沒有關閉notepad.exe前不會繼續往下執行,所以就卡住了。

還有

Proc = System.Diagnostics.Process.Start(Info);
Proc.WaitForExit;

這邊的 Proc 也沒有宣告變數,這程式因該無法執行吧!

cscworm wrote:
寫程式最好理解一下...(恕刪)



cscworm 您好:

謝謝指教....

你卡住的原因因該是,以下兩行

Process p = Process.Start("notepad.exe");
p.WaitForExit;

這兩行表示啟動notepad.exe就是記事本,但是你用WindowsService,因為是背景服務沒有關閉notepad.exe前不會繼續往下執行,所以就卡住了。
-----------------------------------------------------------------
以上兩行是我測試用,不過notepad.exe 執行並沒有跳出來,所以一直放在處理程序裡,愈來愈多.......



還有

Proc = System.Diagnostics.Process.Start(Info);
Proc.WaitForExit;

這邊的 Proc 也沒有宣告變數,這程式因該無法執行吧!

----------------------------------------------------
有呀...
System.Diagnostics.Process Proc;



tks.
=.= 很正常啊

Timer 設定 60* 60 * 1000 執行一次,所以一小時就會打開一次,自然就會累積很多notepad.exe

Process p = Process.Start("notepad.exe");
p.WaitForExit;

等待 notepad.exe 關閉後才會繼續執行,自然就會卡住不會繼續執行。

Windows Service 用的是背景模式,當然不會將GUI畫面顯示在你登入的用戶畫面下。

我是不清楚為什麼要開啟notepad.exe,因為下面的程式碼又沒有要處理notepad.exe相關內容!

cscworm wrote:
=.= 很正常啊Timer...(恕刪)


cscworm 您好:

Process p = Process.Start("notepad.exe");
p.WaitForExit;
---------------------
以上兩行我已刪除了,只是測試用而已...看有沒有執行到這邊來....


Proc = System.Diagnostics.Process.Start(Info);
Proc.WaitForExit;

我目前測出來,是在執行壓縮時出了問題...以上兩行之後的code還是有執行到.....
但奇怪的是 win7/8 都可以正常,xp下卻在壓縮時出了問題....? 怪哉..
因為windows 服務我不知如何debug,所以才加上 notepad.exe 來測...


tks.


nwcs wrote:
猜測之詞:1.xp...(恕刪)


nwcs 您好:


猜測之詞:
1.xp 是否不須用\\,而直接用\即可
2.是否寫要把兩邊的"加進去,變成"""C:\Program Files\WinRAR\"""
也可使用winrar免安裝版,直接把winrar.exe放在c:\winrar目錄下,可避開目錄空白字元的問題
你的情形,我會請你直接先建好.lnk or batch,確認結果無誤後,再去試著用start or shell.

--------------------------------------------------------------
我改成了
Info.WorkingDirectory = @"C:\WinRAR\";
還是沒有辦法壓縮.....
目前確定是在壓縮這邊出了問題,但也找不出問題....因為壓縮之後我加了code都有正常run....
真是有夠奇怪,win7/8都正常,但xp就是有問題....

tks.

chengmou wrote:
nwcs 您好:
猜...(恕刪)

請問是WINRAR沒啟動執行,還是有錯誤訊息?
  • 2
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?