bestlong 怕失憶論壇's Archiver

bestlong 發表於 2013-7-3 15:44

遠端桌面連到伺服器上執行程式會直接跳出

用 Delphi 5 + BDE 開發的程式,安裝在 MSSQL2000 + Windows 2003 Std 環境
使用者以遠端桌面連線到 Win 2003 上執行程式
系統管理員的帳號都沒有問題
一般使用者的帳號進入某些功能就直接跳出

事件檢視器內的訊息

失敗的應用程式 APP.exe,版本 1.0.0.98,失敗的模組 kernel32.dll,版本 5.2.3790.5069,錯誤位址 0x0000bef7。

bestlong 發表於 2013-7-3 15:51

在程式碼逐一用 ShowMessage() 來抓問題段落[code]
procedure TFC0300.FormShow(Sender: TObject);
begin
  ShowMessage('A');
  qyM.Open; //TQuery
  ShowMessage('B');
end;
[/code]發現是 qyM.Open; 這裡的問題,又沒有足夠的資訊
所以加入錯誤處理來看看,程式改成[code]
procedure TFC0300.FormShow(Sender: TObject);
begin
  try
    qyM.Open;
  except
    on E: Exception do
    begin
      ShowMessage(E.Message);
    end;
  end;
end;
[/code]這樣就有了更完整的資訊

當一般使用者首次執行時會出現的錯誤訊息:
Unknown table type.
File or directory does not exist.
File: C:\PDOXUSRS.NET
Permission denied.
Directory: C:\


系統管理者有先執行過後,一般使用者再執行會出現的錯誤訊息:
Unknown table type.
Permission denied.
File: C:\PDOXUSRS.NET
Directory: C:\

因為 C:\PDOXUSRS.NET 在管理員執行時已產生了所以訊息稍有不同

問題很單純就是權限不足
因為在伺服器環境要在 C:\ 目錄下增加檔案需要有系統管理員權限

而 qyM 因為有設定 CacheUpdates := true 就會使用 PDOXUSRS.NET 並且同時會產生資料暫存檔
所以可以先產生 C:\PDOXUSRS.NET 並設定檔案的安全性開放所有使用者(users)可寫入的權限
另外因為 BDE 會產生暫存檔,需要將程式所在的目錄權限也開放所有使用者可寫入的權限
不過這樣開放寫入權限算是治標的方式
最好還是改變架構

如果程式能接受 qyM 的 CacheUpdates 屬性可以不設定 true 就沒有這些麻煩了
頁: [1]

Powered by Discuz! X1.5 Archiver   © 2001-2010 Comsenz Inc.