請問...
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;
}
}
}
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.
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.
內文搜尋

X