|
論壇說明 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
2004-09-09, 02:49 AM | #1 |
註冊會員
|
Visual Basic封裝後安裝程式會認機器
本人用Visual Basic寫了一個資料庫分割的程式,曾於桌上型電腦AMD Athlon™ XP 2000+處理器使用VMware Workstation安裝Windows 98作業系統及Windows 2000 Professional版本、Intel® Cetrino ™筆記型電腦安裝Windows XP Professional、Home等版本及另一台Intel ® Pentium 4處理器之桌上型電腦安裝Windows XP Professional作業進行測試,均能正常安裝。在未安裝其他Office套裝軟體及資料庫管理程式前,仍可正常識別Access 97-2003資料庫並加以分割。曾商借另一台Pentium 4 2.0 M筆記型電腦安裝並執行無誤,一台Intel® Celeron® CPU 1.70GHz桌上型電腦亦同。
但某些機器無法正常執行,錯誤情形為出現「無法預期的錯誤」即關閉,且並未出現Error Code。本人程式中有On Error的敘述,但除了ErrorHandle的處理外,其他情形均用MsgBox顯示Err及Error的說明。對於本程式的情形Microsoft知識庫並未見到討論,搜尋許多網站,目前仍無法解決。詳細情形可於程式設計俱樂部討論區中搜尋「封裝」兩字,但仍本程式遇到情形之無具體解決方案。 此情形並非封裝時未引用某些使用元件,因為全新安裝的OS並加裝任何程式下,可正常執行,只是程式竟會認機器。使用InstallShield X及VB封裝結果皆同,用P Code的方式Complier也是一樣,懇請有經驗的大大協助。謝謝 |
送花文章: 0,
|
2004-09-09, 08:16 PM | #3 (permalink) | |
註冊會員
|
引用:
http://support.microsoft.com/default...46&Product=vbb 封裝時已引用MADC_TYPE進去,已按照說明控制引用之版本,無法安裝的朋友,和我電腦上的OS及Office版本相同,且已請更新MADC最新版及Jet引擎。我在全新安裝的電腦,未加裝任何APP且未更新的情形,不管XP或是2000都可以正常執行。 錯誤應該不是發生在那裡,因為他們是連執行都無法執行,就直接出現「無法預期的錯誤」。 不知是否因為我在起初的Form引用了API,因為我要執行ShellExecute |
|
送花文章: 0,
|
2004-09-09, 09:40 PM | #4 (permalink) |
註冊會員
|
還有一種可能
你的開發環境 可能太新了 例如 xp上開發 裝在 舊一點的os 環境 機器上 ie 的版本 也有關係 因為 os 的 核心元件 跟 ie 有相當程度的 相依 而且 你有用到 api ....... 你可以 把你的 原始碼 找一台 win98 等級的 pc 重心編譯跟封裝 並發佈看看 照以往的經驗來看 在 win98 正常的程式 在 win2000 winxp 應該也沒有問題 如果有問題 ...... 都是可 補捉的錯誤. 倒是還沒有 "無法預期的錯誤" 這類的問題 對了 !! 你有沒有用 其它 第三方開發的元件 當元件內部出問題 也會有 "無法預期的錯誤" 你參考看看!! 我的開發環境 是win98 發佈的平台 都是 win2000 winxp |
送花文章: 11,
|
2004-09-10, 12:41 AM | #5 (permalink) |
註冊會員
|
andy0103 你好
我另製了一個空的setup.exe給不能裝的朋友 內容只包括了原本的第一個Form 就出現這個訊息。「執行階段錯誤50003」,上網查到這個訊息 'Runtime error 50003. Unexpected error 眾說紛云,有的說是Common的OCX要重註冊,有的說IE的問題... 另外又重寫了一個空白的Form,含有工具列而已,朋友可以執行 加入了CommonDialog,他還是能執行 於是,把原專案的第一個Form重寫,內容還是和原本一樣 含有功能表和CommonDialog,竟然又不能執行了... 我的功能表只是讓其他的Form跳出來... Ex. Form1.Show 錯誤訊息又回到「無法預期的錯誤」,沒有錯誤號碼... 錯誤就在這裡..我並沒有引用其他3th Party的東西... 我會試試在Win 98 Complier一次 謝謝.. |
送花文章: 0,
|
2004-09-10, 01:27 AM | #6 (permalink) |
註冊會員
|
附上某些電腦會發生錯誤的程式碼,在Form上只有引用CommonDialog及加上功能表,就連單獨包成一個Setup,能執行的能執行,原本不能執行的也不能執行,所以問題是出在這裡。引用API是沒問題的,因為我做了一個Form來跳出兩個Form,不管是否引用都會錯誤...比較了Setup.lst,該引用的都有進來....
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long Private Sub Form_Load() frmSplash.Show start = Timer Do While Timer < start + 1.5 DoEvents Loop Unload frmSplash mnuSetup.Enabled = False End Sub Private Sub frmCompact_Click() frmCompactDB.Show vbModal End Sub Private Sub mnuExport_Click() frmExport.Show vbModal End Sub Private Sub mnuOpen_Click() ' 顯示開啟檔案對話方塊 Dim Ftemp As String '暫存原檔名 dlgDialog.FileName = "" dlgDialog.Flags = FileOpenConstants.cdlOFNFileMustExist dlgDialog.DialogTitle = "開啟 Access 資料庫檔案" dlgDialog.Filter = "Access 97-2003 (*.mdb)|*.mdb|" dlgDialog.ShowOpen Ftemp = OpenFileName If Len(dlgDialog.FileName) > 0 Or OpenFileName <> Ftemp Then FinishNewName = False '是否進入MDBOUTSET之準則 Tn = 1 '重設自動產生輸出檔名計數器 TableName = "" OpenFileName = dlgDialog.FileName OpenFileType = dlgDialog.FilterIndex mnuSetup.Enabled = True End If End Sub Private Sub mnuAbout_Click() frmAbout.Show vbModal End Sub Private Sub mnuDelLog_Click() MsgBox "確定要刪除Log檔嗎?", vbOKCancel + vbQuestion, "刪除log檔" If rtn = vbOK Then Kill App.Path & "\Outputlog.log" End If End Sub Private Sub mnuEnd_Click() End End Sub Private Sub mnuHelpFile_Click() ShellExecute 0, "open", App.Path & "\Manual.pdf", "", App.Path, 1 End Sub Private Sub mnuLog_Click() If Dir(App.Path & "\outputlog.log") = "" Then MsgBox "請先完成分割後,系統自動產生記錄檔!", vbExclamation, "找不到Log檔案" Else ShellExecute 0, "open", App.Path & "\OutputLog.log", "", App.Path, 1 End If End Sub Private Sub mnuSaveAs_Click() frmConvert.Show vbModal End Sub Private Sub mnuSimple_Click() SavedCount = 0 Setup.Show End Sub Private Sub munCross_Click() frmCrossSetting.Show End Sub |
送花文章: 0,
|
2004-09-10, 06:27 PM | #7 (permalink) |
註冊會員
|
Private Sub Form_Load()
frmSplash.Show start = Timer Do While Timer < start + 1.5 DoEvents Loop Unload frmSplash mnuSetup.Enabled = False End Sub 你在 form_load事件 使用 doevents 我覺的 是有點問題 因為 doevents 會把表單控制權 暫時放出去 但是 這時候 forn_load() 內的程式碼 並未完全 執行 完畢 就在 下一個 執行時間片段 該表單的事件 觸發順序可能會 異常 有可能 form_activate() 事件 執行完成 在 forn_load()事件 之前 doevents 使用在 多工的環境 要小心 常會因電腦的快慢 就在 下一個 執行時間片段 該表單的事件 觸發順序可能會 異常 我想你反覆的test 應該已經快 抓到問題的核心 |
送花文章: 11,
|
2004-09-10, 08:18 PM | #8 (permalink) | |
註冊會員
|
引用:
如何編寫高質量的VB代碼 在使用本機代碼進行編譯時,我發現有時候會引入一些莫名其妙的錯誤。在編譯環境中我的代碼完全正確地被執行了,但是用本機代碼選項生成的EXE檔卻不能正確執行。通常這種情況是在卸載視窗或彈出列印視窗時發生的。我通過在代碼中加入DoEvent語句解決了這個問題。當然出現這種情況的幾率非常少,也許有些VB程式師從來沒有遇到過,但是它的確存在。 So...我加入了Doevents來測試,但是,那是出錯後才加的,加入前和加入後情形一樣。 你講的非常有理,Doevents不能亂用,詳見MSDN說明... 剛聽您這樣一說,我今天又有任務了..不要一在Form Load就Show 另一個Form...試試.. 另一篇英文文章... http://www.experts-exchange.com/Prog..._20853230.html 提到我這個Error Code...大意是,他們公司新進了一批電腦,原本用好好的程式就出錯了,新舊電腦都是用Windows 2000 Sp4的OS...他也是找不出問題所在。 昨天星夜看完Google上英文(國內沒見到任何此類型討論)的類似文章...和我的問題都是不同的。有的說IE太舊,有的說要裝VB6 RunTime那程式,有的說舊的CommonDialog被註冊,新的就註冊不了。我用一個空白的Form去Setup,朋友可以用啊!!馬上請她再執行我的程式..怪..又不成了。問題就出在那個起始Form,但我看不出它的任何不同。如果她的電腦在我這,我一定一天就可以搞定。網路上很多教學文章或是坊間書籍常常都是講一半,哈。有時真的要自己去測試,一項項加一個個Try and Error。 大概,我的起始Form要改改了...再換個型式,山不轉路轉。不要用功能列試試... 這程式是我要送我指導論文教授的,花了我三星期去找資料庫的教學,又不是要去賣,別再整我了,老天!!我又不是讀資管的,從GW Basic進到VB已夠整人了,又碰資料庫,又搞這不相容電腦。小抱怨一下。 |
|
送花文章: 0,
|