原本正常執行檔 一執行會無預警的出現程式出現例外錯誤.... |
答題得分者是:syntax
|
firesu
中階會員 發表:26 回覆:28 積分:55 註冊:2004-12-27 發送簡訊給我 |
|
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
|
firesu
中階會員 發表:26 回覆:28 積分:55 註冊:2004-12-27 發送簡訊給我 |
早上又出現一次了,
這次是遠端連到客戶的電腦作維護的時候.. 第1次run程式..都沒問題, 結果關閉程式然後要再run時,問題又出現了 然後這隻程式就都不能再run了... 當中都沒去動過windows任何設定..只是程式關掉 然後再執行一次.. 用D7在xp上編譯這個 我在試試看 網路檢查版本的程式碼是後來才 上的..之前沒 這段程式碼的exe都沒出現問題... 程式片斷..晚點弄上來(排的很亂..) <textarea class="delphi" rows="10" cols="60" name="code">function CenterStr(Src:String;Before,After:String) :String; var Pos1,Pos2 :WORD; begin Pos1:=Pos(Before,Src) Length(Before); Pos2:=Pos(After,Src); Result:=Copy(Src,Pos1,Pos2-Pos1); end; function GetOnlineStatus: Boolean; var ConTypes : Integer; begin ConTypes := INTERNET_CONNECTION_MODEM INTERNET_CONNECTION_LAN INTERNET_CONNECTION_PROXY; if (InternetGetConnectedState(@ConTypes, 0) =False) then Result := False else Result := True; end; function GetVersion : string; var VerInfoSize : DWORD; VerInfo : Pointer; VerValueSize : DWORD; VerValue : PVSFixedFileInfo; Dummy : DWORD; begin VerInfoSize := GetFileVersionInfoSize(PChar(ParamStr(0)), Dummy); GetMem(VerInfo, VerInfoSize); GetFileVersionInfo(PChar(ParamStr(0)), 0, VerInfoSize, VerInfo); VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize); with VerValue^ do begin Result := IntToStr(dwFileVersionMS shr 16); Result := Result '.' IntToStr(dwFileVersionMS and $FFFF); Result := Result '.' IntToStr(dwFileVersionLS shr 16); Result := Result '.' IntToStr(dwFileVersionLS and $FFFF); end; FreeMem(VerInfo, VerInfoSize); end; procedure CheckNewVer; var NVer,APVer :String; B:Boolean; IdHTTP1: TIdHTTP; begin B:= GetOnlineStatus; if B then begin //網路可以連線 NewVer:=False; NewVerLink:=''; try IdHTTP1:=TIdHTTP.Create(application); APVer:=GetVersion; RunNewVerError:= False; try Idhttp1.HandleRedirects := True; IdHttp1.head(ChkFile); NVer:=CenterStr(idhttp1.Get(ChkFile),'[ver]','[/ver]'); if ApVer<>NVer then begin NewVer:=True; //全域變數 NewVerLink:=CenterStr(idhttp1.Get(ChkFile),'[link]','[/link]'); //全域變數 新版的下載位置 end else begin NewVer:=False; NewVerLink:=''; end; except on eidhttpprotocolexception do begin RunNewVerError:=True; if idhttp1.ResponseCode = 404 then MessageDlg(MS_SCOKETERROR,mtError,[mbYes],0); end; on eidreadtimeout do begin RunNewVerError:=True; if idhttp1.ResponseCode = 404 then MessageDlg(MS_SCOKETERROR,mtError,[mbYes],0); end; on EIdSocketError do begin RunNewVerError:=True; MessageDlg(MS_SCOKETERROR,mtError,[mbYes],0); end; end; finally FreeAndNil(IdHTTP1); end; end else begin //網路不能連線 NewVer:=False; NewVerLink:=''; end; end; </textarea> |
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
根據你的問題陳述,可以想見是程式設計不良所造成
何以見得? 原因在於 1, 第一次一定可以執行 2.當掉後,再也無法執行,但在他台電腦,如是第一次執行,也一定可以執行 因為他台電腦不定,包含客戶的電腦 歸納出,問題與電腦無關,主要是你的程式出錯,但為何跟一般程式當掉後的反應有所不同 主要就在於,這是一支「網路」程式 (也許是用了 con ?) 所以簡單的原因在於,你在程式當掉時,並沒有做好錯誤管理,以致於當掉後的資源無法釋放 一般是無所謂,但問題就在於 socket 的資源是固定的,被當掉的程式佔住,如果不是放,除非你使用另一個 socket resource 不然,只好等該資源被釋放,至於何時釋放,就要看運氣囉,因為不容易解釋間單幾個字就解釋清楚,那就歸給運氣吧 建議你先鎖定應該或可能造成當機程式碼區域,然後除錯,應該可以發現問題 function CenterStr(Src:String;Before,After:String) :String; 這程式不安全 測試連線建議使用 try HTTP_Connector_IdHTTP.Connect(xxxx); except on eidhttpprotocolexception do begin end; 什麼都不做 HTTP_Connector_IdHTTP.Connected 就是 連上或沒連上 很可能是 NewVerLink 取得的位置有問題,導致你沒貼出的部分的程式當掉了 |
firesu
中階會員 發表:26 回覆:28 積分:55 註冊:2004-12-27 發送簡訊給我 |
找到錯誤點了,前面的程式段之後,
做更新版本的同時,會執行一段procedure把客戶在軟體內設定的公司名稱,電話 等基本資料post到server上 procedure sendbasic; const theUrl = 'http://xxxxxxxxxxxxxxx/xxxxxxx/xxxxx.py'; var data: TIdMultiPartFormDataStream; YN:string; IdHTTP1: TIdHTTP; begin YN := 'N'; data := TIdMultiPartFormDataStream.Create; try IdHTTP1:=TIdHTTP.Create(application); data.AddFormField('CompNMC', CORPNMC); data.AddFormField('CompADRS', CORPADRS); data.AddFormField('CompTEL', CORPTEL); data.AddFormField('CompFAX', CORPFAX); data.AddFormField('END', 'END'); YN := IdHTTP1.Post(theUrl, data); finally freeandnil(IdHttp1); end; data.Free; end; 是server設公司的ip才能連.....之後開放就ok了 |
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |