線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3441
推到 Plurk!
推到 Facebook!

如何做到程式自我關閉後,自動重新啟動 ?

尚未結案
hazard
一般會員


發表:30
回覆:24
積分:10
註冊:2006-10-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-05 13:30:36 IP:61.218.xxx.xxx 未訂閱
這支程式是一支伺服的列印程式,一但網路斷線後就會出問題,必須重新啟動才行,但 user 不會注意,所以我需要的功能就像是 geniustom 兄所寫的 「自動取得GMAIL推薦函的程式」,不知有那位大大對於這種做法熟悉的,可以指導一下,感謝
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-05 16:36:58 IP:220.135.xxx.xxx 未訂閱
Hi hazard 你好: 在要關閉的程式中寫如下
procedure TForm1.Button1Click(Sender: TObject);
begin
   WinExec('Project2.exe', SW_Show);
   Close;
end;
這會啟動另一個程式, 另一隻放一個TTimer, 我是設定5秒, 程式如下
unit Unit2;    interface    uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, TlHelp32;    type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;    var
  Form1: TForm1;
  spid:Integer;
  PH : THandle;    implementation
function ApplicationUse(fName : string) : boolean;
var
   hSS: THandle;
   ProcEntry32: PROCESSENTRY32;
   iCount: Integer;
begin
   Result := False;
   iCount := 0;
   hSS := CreateToolHelp32Snapshot(TH32CS_SNAPALL, 0);
   ProcEntry32.dwSize := sizeof(ProcEntry32);
   if Process32First(hSS, ProcEntry32) then begin
      repeat
         if UpperCase(ProcEntry32.szExeFile) = UpperCase(fName) then begin
            spid := ProcEntry32.th32ProcessID;
            Inc(iCount);
            if iCount >= 1 then begin
               Result := True;
               Break;
            end;
         end;
      until not Process32Next(hSS, ProcEntry32);
      CloseHandle(hSS);
   end;
   if Result then Exit;
end;    {$R *.dfm}    procedure TForm1.Timer1Timer(Sender: TObject);
begin
   if not ApplicationUse('Project1.exe') then begin
      WinExec('Project1.exe', SW_SHOW);
      Close;
   end;
end;    end.
程式碼參考 http://delphi.ktop.com.tw/topic.php?topic_id=34139 我不是高手, 高手是正在銀幕前微笑的人. 發表人 - miles 於 2004/11/05 16:40:16
------


我不是高手, 高手是正在銀幕前微笑的人.
geniustom
版主


發表:100
回覆:303
積分:260
註冊:2003-01-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-06 02:18:35 IP:219.68.xxx.xxx 未訂閱
您找我嗎 我沒有用到 class="code"> try 您要做的事 except //發生錯誤時 WinExec('Project1.exe 參數1 參數2', SW_SHOW); Close; end; 即可.. 您可以送參數給自己..當呼叫下一個自己時該做什麼事 例如..WinExec('Project1.exe BACKGROUND', SW_SHOW); 然後寫再FormActivate中..
procedure TForm1.FormActivate(Sender: TObject);
begin
   if ParamStr(1)='BACKGROUND' then
   begin
      self.hide;
   end;
end;
如此就可以在發生錯誤後自動重啟..並且自動隱藏..使用者不會發覺 GOOD LUCK 發表人 -
JammyHsu
一般會員


發表:14
回覆:39
積分:10
註冊:2003-09-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-08 09:29:55 IP:163.28.xxx.xxx 未訂閱
引言: 您可以送參數給自己..當呼叫下一個自己時該做什麼事 例如..WinExec('Project1.exe BACKGROUND', SW_SHOW); 然後寫再FormActivate中..
procedure TForm1.FormActivate(Sender: TObject);
begin
   if ParamStr(1)='BACKGROUND' then
   begin
      self.hide;
   end;
end;
如此就可以在發生錯誤後自動重啟..並且自動隱藏..使用者不會發覺 GOOD LUCK < face="Verdana, Arial, Helvetica"> 那如果原程式有防止重覆執行 在時間點上沒問題吧 ********************************** 做簽名檔就跟寫程式一樣,想不出來!
geniustom
版主


發表:100
回覆:303
積分:260
註冊:2003-01-03

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-08 13:20:13 IP:219.68.xxx.xxx 未訂閱
引言:
引言: 您可以送參數給自己..當呼叫下一個自己時該做什麼事 例如..WinExec('Project1.exe BACKGROUND', SW_SHOW); 然後寫再FormActivate中..
procedure TForm1.FormActivate(Sender: TObject);
begin
   if ParamStr(1)='BACKGROUND' then
   begin
      self.hide;
   end;
end;
如此就可以在發生錯誤後自動重啟..並且自動隱藏..使用者不會發覺 GOOD LUCK < face="Verdana, Arial, Helvetica"> 那如果原程式有防止重覆執行 在時間點上沒問題吧 ********************************** 做簽名檔就跟寫程式一樣,想不出來! < face="Verdana, Arial, Helvetica"> 當然會有問題囉..不過還是有解決辦法ㄚ 防止程式重啟..可以將思考方向改為"關閉先前執行相同的程式" 寫在
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-11-08 18:05:39 IP:218.17.xxx.xxx 未訂閱
感觉你的程式是一个 Service 形态的程式? 你应该另外写一个Service形态的程式作为守护程式,用它来实现 StopService,StartService的功能。 操作 StopService 和 startService,我贴过一段代码。请您参考这里: http://delphi.ktop.com.tw/topic.php?topic_id=58373 JVCL 也有提供控制 Service 的元件。
hazard
一般會員


發表:30
回覆:24
積分:10
註冊:2006-10-28

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-11-09 00:15:51 IP:218.170.xxx.xxx 未訂閱
感謝各位大大的回覆,等測試過後,再回報結果
系統時間:2024-06-28 19:28:03
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!