delphi 啟動外部程式(收藏參考)
2009-01-07 12:54
603 查看
// 上傳檔案 IdFTP.Put(ALocalFileName, AServerFileName,False); // 下載檔案 IdFTP.Get(AServerFileName, ALocalFileName,AUpdateMode,False); // 檢查文件是否存在 try IdFTP.List(Lv_LS,ALocalFileName); if Lv_LS.Text = '' then Lv_File_Found := False else Lv_File_Found := True; except Lv_File_Found := False; end; Function TfrmNormalForm.Fork(AFileName,AFileType,AFileParam : string; AlpProcessInformation :PTProcessInformation ) :boolean ; var Update_SW : Boolean; bCreateProcess: boolean; lpStartupInfo: TStartupInfo; WaitSts: Integer; LocalFile,Lv_PurView,Tst_FileName : string; Query1 : TQuery; f : file of Byte; size : Longint; Lv_ExeName,Link_File : String; begin Result := False; if DirectoryExists(Gc_FileHome) then ChDir(Gc_FileHome); Tst_FileName := 'T_' + AFilename; LocalFile := Gc_FileHome+'/'+Tst_FileName+'.EXE'; // Gc_FileHome := 'C:/WALSIN' Lv_ExeName := Tst_FileName; Query1 := TQuery.Create(nil); if not DBModule.DBSECURITY.Connected then DBModule.DBSECURITY.Connected := True; With Query1 do begin DataBaseName := DBModule.DBSECURITY.DatabaseName; Close; SQL.Text := ' SELECT GET_FUNC(:USERID,:PROGID) FUNC_CODE '+ ' FROM DUAL '; ParamByName('USERID').AsString := G_USERID; ParamByName('PROGID').AsString := AFileName; Open; Lv_PurView := ''; if Not Eof then begin Lv_PurView := FieldByName('FUNC_CODE').AsString; end else begin ShowMessage('無權執行'); Abort; end; Close; SQL.Text := ' Select LINK_PROGID '+ ' FROM SYS001M '+ ' Where PROGID = :PROGID '; ParamByName('PROGID').AsString := AFilename; Open; if not Eof then begin if FieldByName('LINK_PROGID').AsString <> '' then begin Link_File := FieldByName('LINK_PROGID').AsString; Lv_ExeName := StringReplace(Lv_ExeName,AFilename,Link_File,[]); end; end; Close; SQL.Text := ' Select UPLOAD_DATE,FILE_SIZE '+ ' FROM SYS006M '+ ' Where PROGID = :PROGID '; ParamByName('PROGID').AsString := Lv_ExeName; Open; if not Eof then begin Update_SW := False; if Not FileExists(LocalFile) then Update_SW := True else begin Try if StrComp(PChar(FormatDateTime('yyyy/mm/dd hh:mm:ss',FieldByName('UPLOAD_DATE').AsDateTime)), PChar(FormatDateTime('yyyy/mm/dd hh:mm:ss',FileDateToDateTime(FileAge(LocalFile)))) ) > 0 then Update_SW := True else begin try AssignFile(f, LocalFile); FileMode := 0; {Set file access to read only } Reset(f); size := FileSize(f); CloseFile(f); if ( FieldByName('FILE_SIZE').AsInteger <> size ) then Update_SW := True; except Update_SW := False; //表示已在執行 end; end; Except Update_SW := False; //表示已在執行 end; end; if Update_SW then begin Try StatusBar.Panels[0].Text := '更新最新版程式:' + Tst_FileName +' 中..'; StatusBar.Refresh; IdFTP.UserName := Uv_TestUser; IdFTP.Password := Uv_TestPassword; IdFTP.Host := Uv_TestFileServer; IdFTP.Connect; if IdFTP.Connected then begin if Uv_TestFileDir <> '' then IdFTP.ChangeDir(Uv_TestFileDir); IdFTP.Get(Lv_ExeName+'.EXE', Tst_FileName+'.EXE',True,False); IdFTP.Disconnect; StatusBar.Panels[0].Text := '已更新完成最新版程式:' + Tst_FileName +'.'; StatusBar.Refresh; try begin if not DBModule.DBSECURITY.InTransaction then DBModule.DBSECURITY.StartTransaction; Close; SQL.Text := ' Insert Into SYS006D1 (HOSTNAME,PROGID,UPDATE_DATE,VERSION) '+ ' SELECT :HOSTNAME,:PROGID,SYSDATE,VERSION '+ ' FROM SYS006M '+ ' WHERE PROGID = :PROGID '; ParamByName('HOSTNAME').AsString := Uv_HostName; ParamByName('PROGID').AsString := Lv_ExeName; ExecSQL; end; if DBModule.DBSECURITY.InTransaction then DBModule.DBSECURITY.Commit; except if DBModule.DBSECURITY.InTransaction then DBModule.DBSECURITY.Rollback; end; end; Except StatusBar.Panels[0].Text := '無法與服務器 '+Uv_TestFileServer+'連線'; ShowMessage(StatusBar.Panels[0].Text+ ',無法更新程式'); IdFTP.Disconnect; end; end; FillChar(lpStartupInfo, Sizeof(TStartupInfo), #0); lpStartupInfo.cb := Sizeof(TStartupInfo); lpStartupInfo.dwFlags := STARTF_USESHOWWINDOW; lpStartupInfo.wShowWindow := SW_SHOWNORMAL; bCreateProcess := CreateProcess(nil, PChar(LocalFile +' '+ // LocalFile := 'C:/WALSIN/XXX.EXE' 'XXX' +' '+ 'XXX' + ' '+ G_USERID +' '+ G_USERPASSWORD +' '+ Lv_PurView + ' '+ AFileParam), nil, nil, False, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, lpStartupInfo, AlpProcessInformation^); Result := bCreateProcess; end; Close; end; Query1.free; if DBModule.DBSECURITY.Connected then DBModule.DBSECURITY.Connected := False; end;
相关文章推荐
- 摘錄: 啟動外部程式使用的函數 -- ShellExecute -- 引用單元ShellAPI
- DELPHIBBS精华收藏
- delphi怎样调用外部EXE文件
- [分享]外部exe窗体嵌入winform 分类: .NET 2015-03-12 11:26 68人阅读 评论(0) 收藏
- Delphi的常用数学函数,不用几乎有点忘了,搜索记忆收藏。
- Delphi 中实现判断某个外部程序是否运行(如果运行则执行一个命令否则执行一个命令)
- 让你的delphi程序支持外部参数
- Delphi通过管道执行外部命令行程序(cmd)并获取返回结果
- [Delphi]制作类似WinAmp一样的“磁性”窗口【转载/收藏】
- Delphi调用外部程序详解
- Delphi调用外部程序详解(转)
- delphi窗口的双缓冲绘制浅析收藏
- delphi窗体启动外部exe
- 在Delphi中静态调用DLL 引用外部Dll External Dll 导入Dll
- Delphi创建虚拟桌面实现后台调用外部程序
- 「Windows 無法存取指定的裝置、 路徑或檔案 」 錯誤,當您嘗試安裝、 更新或啟動程式或檔案
- delphi csdn论坛技巧收藏贴
- delphi制作程序啟動歡迎窗體
- 【转】[C#.NET][VB.NET] 用 Win32 API 控制 外部應用程式選單