Compile後得到的exe檔,在什麼情況下拿到別台機器會不能run |
尚未結案
|
Angi
一般會員 發表:16 回覆:56 積分:14 註冊:2005-01-12 發送簡訊給我 |
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
Angi 您好: 會產生您所描述狀況的原因很多,例如: 1. 使用了適用於不同環境的指令或 API,例如:使用了僅支援 WIN2000 或更新系統的 API,但是拿到 WIN98 上執行。 2. 使用到某些外部檔案(.DLL、.DAT...等),而其它機器上並未安裝那些檔案,或是那些檔案的版本不符合程式所需。 3. 程式內存取了需要權限等級較高的資料,程式開發者的權限等級可能較高,因而不容易發生問題,其它機器上的用戶權限等級可能較低,因此無法存取某些資料。 4. 程式對記憶體需求過大而其它機器的記憶體不敷使用,或是程式有記憶體外洩的的現象,通常開發程式的機器上會安裝較多的記憶體,短時間的運作不容易發現問題,當移到其它記憶體較少的機器上時,會很快就發生記憶體上的問題。 5. 程式內流程不當,在較快(或較慢)的機器上執行不會出錯,但是拿到其它速度較慢(或較快)的機器上執行時,會因指令執行過慢或過快而產生一些奇怪的問題。 6. 產生的程式在複製到其它電腦上的過程出錯,因此未能正常運作。 7. 程式內未對一些例外狀況做適當處理,導致程式容易當掉。 8. 程式中有使用到某些硬體週邊,而其它機器上並未安裝那些設備。 9. ....等等。 總之;問題的可能性還是蠻廣的,建議您將相關的狀況描述清楚一點 (是完全不能啟動程式,還是可啟動程式但執行到某項功能時會產生某種錯誤訊息....等等),同時將不同的使用環境 (硬體上的配置、作業系統種類與版本....等) 都列出來,這樣子比較容易讓其他有經驗的朋友們能幫忙找出問題之所在。
|
Angi
一般會員 發表:16 回覆:56 積分:14 註冊:2005-01-12 發送簡訊給我 |
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
Angi 您好: 您可以先試著透過 "做成單一執行檔" 的方式來試試看,也就是不要將程式做成 "執行檔 Runtime Packages" 的方式,看看問題是否與 BCB Runtime Modules 或是外部函式庫有關?例如: 1. 在 BCB IDE 環境中依序選擇下列的選單項目:
Project -> Options -> Packages
將 Build with Runtime Packages 項目的圈選取消掉,接著查看:
Project -> Options -> Linker
將 Use Dynamic RTL 項目的圈選取消掉。 2. 重新編譯成 .exe 檔案 (程式檔案會變得較大些)。 3. 複製到其它電腦上再做測試。 或者您也可以在在原始程式的各個流程段落插入訊息提示功能以便除錯,例如: 1. 按照程式流程在每個關鍵點插入 ShowMessage("step 1"); 之類的訊息提示 (提示訊息依序設為 step 2, step 3....等),或是顯示出某個重要變數的內容:ShowMessage(SomeVar);。 2. 重新編譯後拿到其它機器上執行,看看是顯示到那個步驟時才發生錯誤?這樣就能大致判斷出錯誤點的所在,以便縮小偵錯範圍進而抓出問題。 如果上述方式都無法協助您解決問題的話,請您提供更詳細一點的參考資訊,這樣子比較容易讓其他人提供更進一步的協助,例如: 1. 程式作用與基本流程為何? 2. 錯誤日誌的內容或畫面截圖,讓其他人知道到底是發生了何種錯誤? 3. 程式表頭內容,看是否有引用其它外部函式庫? 4. 開發主機與其它電腦的差異為何?
|
暗黑破壞神
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我 |
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=58931 這是個老問題了。
Borland 為了要讓開發時編譯速度變快。所以平時就不把那些東西編進執行檔中。
可是等你要交付程式時。常會出現這樣的問題。
這是他們對開發人員照顧不週的地方。 我覺得要是他們照顧的好。應會有一個功能是MAKE FINAL。
這樣就連打包。連這兩個選項全部處理好。
因為太多人不喜用INSTALL程序。。。。所以不能把那些DLL。。。。都指定包好。 至於說。
引言:1. 按照程式流程在每個關鍵點插入 ShowMessage("step 1"); 之類的訊息提示 (提示訊息依序設為 step 2, step 3....等),或是顯示出某個重要變數的內容:ShowMessage(SomeVar);。這個方法。我個人是極不建議啦。 一個不小心。你會整個螢幕都是MESSAGE。關它的速度遠比它產生的慢。 而要用 單步DEBUG 去 trace 程式的時候。它又用不上。 所以我建議你,把畫面拉大一點。放個 MEMO上去。把要DEBUG用的訊息就丟到MEMO去。等到DEBUG完後。也不用改很多地方。只要把MEMO的VISIBLE設成看不到。再重編程式就可以了。這樣。你的程式不用再修改就可以當正式的出了。 想要進行DEBUG。只要把MEMO打開。就可以看到死在那邊了。 不錯的方法。你可以學起來。 甚至我也曾在程式中藏了一些特殊的按鍵組合。讓MEMO出現。 就可以在執行期立刻了解問題在那邊。 而不用回到開發環境慢慢查。^_^ |
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
暗黑破壞神 您好: 您寫道:
引言: 至於說。我不清楚您對 "關鍵點" 的認知是這樣的,您會不會過於武斷了些?難道您會在除錯時將 ShowMessage() 放到 OnTimer 或是 OnMessage 這類的地方,或是將整個程式的每個事件之中都插上 ShowMessage() 嗎?否則何以會有 "整個螢幕都是MESSAG" 這種狀況?我實在不太理解,請賜教。 Angi 提到的是 "完全沒辦法開啟",就這個部份而言,我個人認為只需在 MainForm 的 OnCreate 與 OnShow 事件之間的 "關鍵點" 放置 ShowMessage(),先確定程式到底是否有正確的啟動?如果確認能正確啟動,再進一步考慮進行其它除錯步驟即可,如果連放在 OnCreate 的訊息都沒有出現,那麼就表示根本就還不到對程式流程做除錯的階段。引言:1. 按照程式流程在每個關鍵點插入 ShowMessage("step 1"); 之類的訊息提示 (提示訊息依序設為 step 2, step 3....等),或是顯示出某個重要變數的內容:ShowMessage(SomeVar);。這個方法。我個人是極不建議啦。 一個不小心。你會整個螢幕都是MESSAGE。關它的速度遠比它產生的慢。 而要用 單步DEBUG 去 trace 程式的時候。它又用不上。 引言: 所以我建議你,把畫面拉大一點。放個 MEMO上去。把要DEBUG用的訊息就丟到MEMO去。等到DEBUG完後。也不用改很多地方。只要把MEMO的VISIBLE設成看不到。再重編程式就可以了。這樣。你的程式不用再修改就可以當正式的出了。 想要進行DEBUG。只要把MEMO打開。就可以看到死在那邊了。您說的這種作法在某些除錯狀態下當然有可取之處,但是要正式發行時,不用條件式編譯 (或手動方式) 將其刪除掉,而僅將 Memo 的 Visible 設為 false,這種作法實有待商榷,難道您不擔心程式在他人正式使用時,記憶體被這個 Memo 一點一滴的佔用光嗎? 另外就是當您將 Memo 的 Visible 設為 false 後,而程式發生了您所說的 "死" 掉的狀況時,請問您要如何對一個 "死掉的程式" 做到 "把MEMO打開"?然後還能更進一步的 "看到死在那邊" 呢? 發表人 - RedSnow 於 2005/03/31 21:29:52 |
Angi
一般會員 發表:16 回覆:56 積分:14 註冊:2005-01-12 發送簡訊給我 |
|
kartan_01
一般會員 發表:42 回覆:60 積分:20 註冊:2004-12-08 發送簡訊給我 |
|
boson
中階會員 發表:74 回覆:155 積分:85 註冊:2004-07-31 發送簡訊給我 |
引言: 經過測試發現,只要加上連結資料庫的部份就不能開啟 因為我把連結資料庫寫成一個DataModule, 當我沒把它加進來,程式就可以開啟, 一旦加上這一個DataModule,程式就當了 據友人說,compiler出來的exe檔, 只要用到資料庫,就不能用copy到別台執行 就算我的資料庫是遠端連結也是一樣?是嗎? 那我該怎麼拿到別台去run呢??應該是你放在 DataModule 上頭的一些資料庫元件, 如 ADOConnection, ADODataSet 等等 屬性是設定為 Active=True 或 connected=True 的 所以程式一執行, 就會嘗試將打開資料庫並讀取資料 此時若你的 connectionstring 的內容與機器上的資料庫不符, 就會當掉了 我習慣將這些資料庫元件, 初始值設為不自動開啟 然後在 FormCreate 或 FormActivate 時, 再依機器本身的情況, 設定 ConnectionString 然後再以程式開啟, 同時, 要用 Try except 圈起來, 當開啟失敗時, 才能通知 user 到底發生了什麼事情 |
Angi
一般會員 發表:16 回覆:56 積分:14 註冊:2005-01-12 發送簡訊給我 |
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
怪了?那不就跟我第一篇回覆裡的第二種狀況吻合嗎?難道在我做了回覆之後,妳根本都沒試著逐項去查看?妳要是早些查看、比對使用到的外部 .DLL 檔,就不用讓那麼多熱心的網友們一直接著瞎猜了。
會產生您所描述狀況的原因很多,例如: 1. 使用了適用於不同環境的指令或 API,例如:使用了僅支援 WIN2000 或更新系統的 API,但是拿到 WIN98 上執行。 2. 使用到某些外部檔案(.DLL、.DAT...等),而其它機器上並未安裝那些檔案,或是那些檔案的版本不符合程式所需。 3.........
|
pigbaby
初階會員 發表:2 回覆:84 積分:47 註冊:2002-09-02 發送簡訊給我 |
豬寶寶的經驗是
公司也有這樣的情形
公司是用WIN 98 +DELPHI 7 + MS SQL
一般來說
在程式要給USER前
豬寶寶會先去USER那邊安裝MDACTYP28.EXE (Microsoft Data Access Components)
下載位置
http://www.microsoft.com/downloads/details.aspx?FamilyID=6c050fe3-c795-4b7d-b037-185d0506396c&displaylang=zh-tw 灌完後
程式用ADO去連MS SQL就不會有問題 提供您參考看看
引言: 經過測試發現,只要加上連結資料庫的部份就不能開啟 因為我把連結資料庫寫成一個DataModule, 當我沒把它加進來,程式就可以開啟, 一旦加上這一個DataModule,程式就當了 據友人說,compiler出來的exe檔, 只要用到資料庫,就不能用copy到別台執行 就算我的資料庫是遠端連結也是一樣?是嗎? 那我該怎麼拿到別台去run呢?? |
danny
版主 發表:100 回覆:522 積分:595 註冊:2002-03-11 發送簡訊給我 |
引言: 因為我使用的是dbExpress元件 所以,只要將compiler檔copy至另一台機器 再將midas.dll檔案copy至另一台機器的winnt/system32 就可以成功執行了dbExpress 應該不是 Copy midas.dll (這是 MIDAS 使用的) dbExpress 要 Copy 相對應的 .dll (視 Database 而定) 才是吧! Interbase: dbexpint.dll, gds32.dll(Interbase Client 必備) MS-SQL: dbexpmss.dll, 其他 MS-SQL Client 必備 DLL 其他 Database 就自己找了 ...
------
將問題盡快結案也是一種禮貌! |
Angi
一般會員 發表:16 回覆:56 積分:14 註冊:2005-01-12 發送簡訊給我 |
引言RedSnow:
怪了?那不就跟我第一篇回覆裡的第二種狀況吻合嗎?難道在我做了回覆之後,妳根本都沒試著逐項去查看?妳要是早些查看、比對使用到的外部 .DLL 檔,就不用讓那麼多熱心的網友們一直接著瞎猜了。 我不知道若不了解什麼原因而導致錯誤的人,是否都能了解您所說的,不知道真正能夠因為這個回答而解決問題的人又有多少,實在是因為看了您說的,還是不知該從何測起,也許知道是某個dll檔不在另一台,但該怎麼知道是哪一個,不知從何著手,更何況 引言danny: dbExpress 應該不是 Copy midas.dll (這是 MIDAS 使用的)
dbExpress 要 Copy 相對應的 .dll (視 Database 而定) 才是吧! Interbase: dbexpint.dll, gds32.dll(Interbase Client 必備)
MS-SQL: dbexpmss.dll, 其他 MS-SQL Client 必備 DLL
其他 Database 就自己找了 ... 我雖然知道我使用的是dbExpress的方式,但我也無法得知,原來我需要的是midas.dll,我沒辦法依照我所用之元件,正確得知我需要的是哪一個dll檔,該放到另一台機器的哪裡,再加上 引言:
總之;問題的可能性還是蠻廣的,建議您將相關的狀況描述清楚一點 (是完全不能啟動程式,還是可啟動程式但執行到某項功能時會產生某種錯誤訊息....等等),同時將不同的使用環境 (硬體上的配置、作業系統種類與版本....等) 都列出來,這樣子比較容易讓其他有經驗的朋友們能幫忙找出問題之所在。 雖然您說中了這一項,但若要全部測完您所說的,老實說,真不知該從哪一項著手,所以,在下一篇,才會再詳述一下我的情形,只希望能夠縮小範圍,只能說小女子才疏學淺,沒辦法一下體會各位大大所述,不過,還是謝謝大家囉!
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
引言: 我不知道若不了解什麼原因而導致錯誤的人,是否都能了解您所說的,不知道真正能夠因為這個回答而解決問題的人又有多少,實在是因為看了您說的,還是不知該從何測起,也許知道是某個dll檔不在另一台,但該怎麼知道是哪一個,不知從何著手,更何況妳有將妳的 "程度" 加以說明嗎?我怎麼會知道妳是看得懂還是看不懂?若是看不懂的話,可以再接著細問便是,我花了時間列出來的一大堆 "可能狀況",妳連一個相關的回應都沒有,既未說明是否經過測試後,已經排除了某些狀況?也未針對妳不解瞭或是看不懂的 "可能狀況" 再加以詢問。 引言: 雖然您說中了這一項,但若要全部測完您所說的,老實說,真不知該從哪一項著手,所以,在下一篇,才會再詳述一下我的情形,只希望能夠縮小範圍,只能說小女子才疏學淺,沒辦法一下體會各位大大所述,不過,還是謝謝大家囉!可不可以請 Angi 抬頭看一下妳發問的標題是什麼?妳問的是 "在什麼情況下拿到別台機器會不能run" 耶,再說;妳提供的資訊可謂少得可憐,有誰能依據妳提供的那一點資訊就可以馬上知道妳缺的是某個名稱的 DLL 檔嗎? 我是針對妳的標題將 "可能的狀況" 列出來,妳若是沒打算將他人列出來的可能性加以參考或深入探討的話,那又何必用這樣的標題來發問? |
Angi
一般會員 發表:16 回覆:56 積分:14 註冊:2005-01-12 發送簡訊給我 |
引言:
妳有將妳的 "程度" 加以說明嗎?我怎麼會知道妳是看得懂還是看不懂?若是看不懂的話,可以再接著細問便是,我花了時間列出來的一大堆 "可能狀況",妳連一個相關的回應都沒有,既未說明是否經過測試後,已經排除了某些狀況?也未針對妳不解瞭或是看不懂的 "可能狀況" 再加以詢問。 我想...在您回覆完後,就是因為看到"問題的可能性還是蠻廣的,建議您將相關的狀況描述清楚一點",才又做了第二次的回覆,我只是想縮小範圍,而不是一個一個盲目的試,也許我的回覆,您不認為是回覆您,不過,在此之前只有您回答,我不知,這是不是算一點回應也沒有,再加上,事後您又回覆了第二次,我也都照著試了,只是都不合我所要的答案.我想,現在也沒必要再討論這個,若您在意的是”答題得分者”,給您就是了,但我覺得您的回覆只沾到一點邊,沒有正面的回答到,我想標題只是個標題,不能代表一切,最重要的是真正解決問題的關鍵點,所以當初才沒給您得到這個分數
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
引言:引言: ....妳連一個相關的回應都沒有.... ....也許我的回覆,您不認為是回覆您,不過,在此之前只有您回答,我不知,這是不是算一點回應也沒有....請 Angi 看清楚一點我的 "原文" 是怎麼寫的: 我花了時間列出來的一大堆 "可能狀況",妳連一個相關的回應都沒有,既未說明是否經過測試後,已經排除了某些狀況?也未針對妳不解瞭或是看不懂的 "可能狀況" 再加以詢問。 以上是 "一整句話",不是拆開來看的,也不應該僅擷取其中一句 "妳想要" 的就拿來發揮,這次看懂了嗎?請妳千萬不要再用 "斷章取義" 的方式來看回文。 引言:我只是想縮小範圍,而不是一個一個盲目的試妳原來就是在問 "在什麼情況下拿到別台機器會不能run",這種狀況又不是僅有一個標準答案的,妳若不打算試,又為何要在此徵詢意見?妳不去試那又要如何去縮小問題的範圍? 引言:只是都不合我所要的答案如果妳只是要 "合妳所要的答案",那麼妳應該使用 "明確的標題與內容",這樣子就不會出現那麼多 "不知趣" 的人,寫出那麼多 "不合妳所需" 的建議與經驗了。 引言:若您在意的是”答題得分者”,給您就是了,但我覺得您的回覆只沾到一點邊,沒有正面的回答到我確實在意,但我在意的並非 "我是否得分"?沒給分的人多得是,也不缺妳一個,若是為了那一分而已,值得我寫那麼多嗎?分數是虛擬的,既吃不飽也餓不著,妳還是自己留著吧。 我在意的是妳的態度,妳發問主題是徵詢 "可能情況" 而不是 "絕對的解決問題",除了妳自認是 "為了縮小範圍" 的那篇之外,請妳回頭複習一下,看看妳有針對大家提出 "可能狀況"、"建議"、"經驗" 的那一條做出正面回應的嗎?妳不但沒有一一正面回應,最終還自行結案了事,讓人有拿著熱臉貼冷屁股的感覺。 引言:我想標題只是個標題,不能代表一切,最重要的是真正解決問題的關鍵點,所以當初才沒給您得到這個分數妳想錯了,標題不僅僅是標題而已,若是可以 "文不對題" 的話,那麼還要標題做什麼?任何人都是先在標題索引頁,看到標題並覺得自己有興趣或是自己有能力作出相關回應後,才會點擊進入看內文的,因此標題與內文要相符,否則就會誤導他人,並且浪費雙方的時間罷了。 |
Angi
一般會員 發表:16 回覆:56 積分:14 註冊:2005-01-12 發送簡訊給我 |
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
|
heartgame0
一般會員 發表:2 回覆:29 積分:11 註冊:2008-07-28 發送簡訊給我 |
這一討論解決了我的一個問題!
就是copy dbexpint.dll這一個樣後,就可以執行我的程式了!第一次用搜尋,找到我的問題。 ----其實對我們後生,要靠搜尋找到我要的問題,已用2年,都沒有找到答案過, 第一次的成功,真是高興。(一開始都是打不中關鍵字,最近用----delphi 別台電腦-----找不到答案, 這次用----delphi 打包-----找到答案)打包很久以前用過,但是還是沒找到,只好先放著,問題不是很急, 學東西急不來,花錢學比較快,真想找高手問,一個問題收到少錢。但是看到大家的問題, 並不是馬上回答的到要的答案,實在不好算錢吧!!!!
------
資訊業是永遠不能停止學習的行業! 但是進步都只是一點點一點點! ==可以不用理我!因為我的程度只有2成,或許不到!! ==我只會拉拉元件,打打迴圈,打打條件判斷,連連資料庫,rs232送送訊號,印表機簡單列印。 只有寫寫小小的點餐軟體(為何想寫,因為叫人家改的小東西,都ooxx,是會付錢的又不是沒錢,但是理由還是一堆) |
heartgame0
一般會員 發表:2 回覆:29 積分:11 註冊:2008-07-28 發送簡訊給我 |
我又拿別台完全乾淨的電腦,發現,不是只要 copy dbexprint.dll 就好了!
真奇怪,為什麼會要用到的檔案,沒有的,就都跳出來通知你? 只能有的跳出來,有的就不會跳出來嗎? 除了那個,還要copy midas.dll 這一個,我的程式才會可以出現,目前執行還沒有什麼問題。 我說的這兩個,是沒有跳出來的,有跳出來的就不說了,還有一個.dll檔,大家都會跳出來才對。 我的程式只要copy 3個.dll就可以在別電腦運作。我寫的軟體是連interbase資料庫的。 ===================引 用 heartgame0 文 章=================== 這一討論解決了我的一個問題! 就是copy dbexpint.dll這一個樣後,就可以執行我的程式了!第一次用搜尋,找到我的問題。 ----其實對我們後生,要靠搜尋找到我要的問題,已用2年,都沒有找到答案過, 第一次的成功,真是高興。(一開始都是打不中關鍵字,最近用----delphi 別台電腦-----找不到答案, 這次用----delphi 打包-----找到答案)打包很久以前用過,但是還是沒找到,只好先放著,問題不是很急, 學東西急不來,花錢學比較快,真想找高手問,一個問題收到少錢。但是看到大家的問題, 並不是馬上回答的到要的答案,實在不好算錢吧!!!!
------
資訊業是永遠不能停止學習的行業! 但是進步都只是一點點一點點! ==可以不用理我!因為我的程度只有2成,或許不到!! ==我只會拉拉元件,打打迴圈,打打條件判斷,連連資料庫,rs232送送訊號,印表機簡單列印。 只有寫寫小小的點餐軟體(為何想寫,因為叫人家改的小東西,都ooxx,是會付錢的又不是沒錢,但是理由還是一堆) |
heartgame0
一般會員 發表:2 回覆:29 積分:11 註冊:2008-07-28 發送簡訊給我 |
最近找VISTA的打包問題,網路上找到一個設定檔可以用,
Range checking 打勾,然後把每一個DLL都改名字, 都會顯示沒有檔案的名稱! 不知道這個設定可不可以決解所有DLL檔的問題,如果可以,就太好了。 ===================引 用 heartgame0 文 章=================== 我又拿別台完全乾淨的電腦,發現,不是只要 copy dbexprint.dll 就好了! 真奇怪,為什麼會要用到的檔案,沒有的,就都跳出來通知你? 只能有的跳出來,有的就不會跳出來嗎? 除了那個,還要copy midas.dll 這一個,我的程式才會可以出現,目前執行還沒有什麼問題。 我說的這兩個,是沒有跳出來的,有跳出來的就不說了,還有一個.dll檔,大家都會跳出來才對。 我的程式只要copy 3個.dll就可以在別電腦運作。我寫的軟體是連interbase資料庫的。
------
資訊業是永遠不能停止學習的行業! 但是進步都只是一點點一點點! ==可以不用理我!因為我的程度只有2成,或許不到!! ==我只會拉拉元件,打打迴圈,打打條件判斷,連連資料庫,rs232送送訊號,印表機簡單列印。 只有寫寫小小的點餐軟體(為何想寫,因為叫人家改的小東西,都ooxx,是會付錢的又不是沒錢,但是理由還是一堆) |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |