bestlong 怕失憶論壇

標題: 遠端桌面連到伺服器上執行程式會直接跳出 [打印本頁]

作者: 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() 來抓問題段落
  1. procedure TFC0300.FormShow(Sender: TObject);
  2. begin
  3.   ShowMessage('A');
  4.   qyM.Open; //TQuery
  5.   ShowMessage('B');
  6. end;
複製代碼
發現是 qyM.Open; 這裡的問題,又沒有足夠的資訊
所以加入錯誤處理來看看,程式改成
  1. procedure TFC0300.FormShow(Sender: TObject);
  2. begin
  3.   try
  4.     qyM.Open;
  5.   except
  6.     on E: Exception do
  7.     begin
  8.       ShowMessage(E.Message);
  9.     end;
  10.   end;
  11. end;
複製代碼
這樣就有了更完整的資訊

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

系統管理者有先執行過後,一般使用者再執行會出現的錯誤訊息:
Unknown table type.
Permission denied.
File: C:\PDOXUSRS.NET
Directory: C:\
PDOXUSRS.NET 錯誤2.png
因為 C:\PDOXUSRS.NET 在管理員執行時已產生了所以訊息稍有不同

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

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

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

圖片附件: PDOXUSRS.NET 錯誤1.png (2013-7-3 15:50, 3.35 KB) / 下載次數 99
http://www.bestlong.idv.tw/forum.php?mod=attachment&aid=MzgxfDE0OWM2MzVhfDE3MTQ4MDU5OTd8MA%3D%3D



圖片附件: PDOXUSRS.NET 錯誤2.png (2013-7-3 15:50, 2.97 KB) / 下載次數 101
http://www.bestlong.idv.tw/forum.php?mod=attachment&aid=MzgyfDg1YWJiMTAzfDE3MTQ4MDU5OTd8MA%3D%3D






歡迎光臨 bestlong 怕失憶論壇 (http://www.bestlong.idv.tw/) Powered by Discuz! X1.5