本章節將說明您在建立部署專案與部署應用程式時,可能會遭遇的各種問題。
安裝之後,應用程式失敗並警告需要 MDAC 2.7
任何參考 System.Data 命名空間的應用程式,對於部署工具無法偵測到的 Microsoft Data Access Components (MDAC) 2.7 版具有相依性。如果目標電腦上沒有安裝 MDAC 2.7 或更新的版本,則應用程式就會失敗。如需詳細資訊,請參閱部署和相依性。
若要避免這個錯誤,應該加入可以檢查正確的 MDAC 版本,並在沒找到 MDAC 時停止安裝的啟動條件。如需詳細資訊,請參閱 HOW TO:新增 Microsoft Data Access Components 的啟動條件。
注意事項 |
|---|
| 除了加入啟動條件之外,您還可以選擇將 MDAC 合併模組加入部署專案,必要時,它會自動安裝 MDAC。MDAC 的合併模組並不包括在 Visual Studio 中,但是日後可能可以在 Microsoft Web 網站上找到。 |
安裝於當地語系非英文之電腦時,MFC 應用程式並未當地語系化
使用 Visual Studio 部署專案來部署 MFC 應用程式時,並不會偵測已當地語系化之合併模組 Mfc_loc_e.msm 與 Mfc_loc_fe.msm 的相依性。合併模組包含在 Visual C++ 中,預設的安裝位置是 \Program File\Common\Merge Modules。若要散發已當地語系化的 MFC 應用程式,您必須手動將這兩個合併模組加入至部署專案中。如需詳細資訊,請參閱部署和相依性。
當專案輸出群組、組件或合併模組加入至部署專案時,系統會偵測任何相依的組件,並將其加入至專案中。如果相依組件是在執行階段透過程式碼載入,部署工具就無法偵測出該組件。您應盡可能避免由程式碼載入組件,或是手動將相依組件加入至部署專案中。如需詳細資訊,請參閱部署和相依性。
將「Web 安裝」安裝至 Web 伺服器時,Web 應用程式資料夾與任何 Web 自訂資料夾的 [VirtualDirectory] 屬性會決定這些資料夾中的檔案將安裝至 Web 根目錄的相對位置。如果屬性是空白的,則檔案會安裝至 Web 根資料夾 (inetpub\wwwroot)。如需詳細資訊,請參閱 VirtualDirectory 屬性。
如何將 Web 應用程式安裝至 Web 伺服器根目錄?
在預設狀況下,使用「Web 安裝」部署專案來安裝 Web 應用程式時,檔案會直接安裝在 Web 根資料夾之下的一個資料夾中,其名稱與部署專案相同。Web 應用程式資料夾的 [VirtualDirectory] 屬性決定了檔案的安裝位置。若要安裝至 Web 根目錄,請將 [VirtualDirectory] 屬性變更為 null (刪除預設值)。如需詳細資訊,請參閱 VirtualDirectory 屬性。
在 Windows Vista 上使用 Visual Studio 2005 內的 Web 安裝部署專案
這個章節是針對 Visual Studio 2005 SP1 所新增。
當您在 Windows Vista 上的 Visual Studio 2005 內建立「Web 安裝」部署專案時,必須開啟 [IIS Metabase 及 IIS 6 設定相容性] 這項 Windows 功能,並且必須以系統管理員身分登入,否則將無法執行 setup.exe 來安裝專案。
無法偵錯使用 Xcopy 命令所部署的 Web 應用程式
若 Web 應用程式是以 Xcopy 命令複製到 Web 伺服器中,系統不會自動為您的應用程式設定網際網路資訊服務 (IIS)。偵錯功能無法執行是因為系統並未將應用程式資料夾視為應用程式的根目錄。
複製之後,您需要使用 IIS 管理員,將新的資料夾設為應用程式的根目錄。此外,您應設定應用程式 Bin 資料夾的權限,以免 DLL 檔被下載。
注意事項 |
|---|
| 與其使用 Xcopy 命令,不如考慮使用 [複製專案] 命令或是 Web 安裝部署專案。如需詳細資訊,請參閱 其他部署。 |
不幸的是,目前沒有直接的方式可關閉相依性分析搜尋和解析。不過,仍有一個解決方法:您可以在按一下 [SearchPath] 屬性時出現的對話方塊中,清除 [包含標準搜尋路徑] 選項。
另外還有一些重點要考慮一下:
-
您必須使用 [加入檔案] 命令來加入檔案 (在 [專案] 功能表上,指向 [加入],然後按一下 [檔案])。如果您使用 [加入專案輸出] (在 [專案] 功能表中,指向 [加入],然後按一下 [專案輸出]),就會加入從程式碼專案回報的相依性。
-
當您在建置時,您可能會看見一或多個 [找不到相依性] 的警告,不過在此情況下可予以忽略。
-
如果您只想要關閉某些檔案的相依性分析,您可以將這些檔案放置在關閉標準搜尋路徑的合併模組專案中。然後,請使用 [加入合併模組] (在 [專案] 功能表中,指向 [加入],然後按一下 [加入合併模組]),將 .msm 加入開啟標準搜尋路徑的一般安裝專案中。
Visual Studio 會建立通告的捷徑,如此一來,當程式一啟動時,就會驗證所有檔案是否存在。若要變更這個行為,使 Visual Studio 不修復檔案,請選取安裝專案內的檔案,並將 [Condition] 屬性變更為 [NOT REINSTALL],如此一來,檔案在修復時將不會重新安裝。將其 [Transitive] 屬性設定為 [TRUE],以重新評估條件。這樣就會讓 Installer 在第一次刪除檔案後於螢幕上短暫出現,同時它會驗證不應該重新安裝該檔案,不過之後您就不會看見 Installer 了。
您可以使用下列任何一項方法:
-
在程式碼中,加入 System.Diagnostics.Debugger.Launch 的呼叫。這個方法會開啟 Just-In-Time 偵錯並讓您將新的偵錯工具附加至程式碼。
-
在程式碼中,加入 MessageBox.Show("Debug Me") 的呼叫。當此訊息方塊出現時,使用 Visual Studio 可附加至 MessageBox 處理序。然後,請在程式碼中放入 break (Visual C# 專案) 或 stop (Visual Basic 專案)。
-
設定您的偵錯偏好設定來啟動 InstallUtil.exe (位於 \winnt\Microsoft.net\Framework\version),然後將組件當做參數傳遞給它。當您按下 F5 時,就會叫用中斷點。InstallUtil.exe 將會執行自訂動作,就如同 MSI 的執行方式一樣。
這是已知的 Regasm Bug。如果您的組件含有相依性,例如位於另一個類別庫 (Class Library) 上,則 RegisterCOM 可能無法運作,因為系統會呼叫 Regasm 來取得註冊資訊。由於 Regasm 是在 \obj 目錄中呼叫的,所以找不到相依性,而且 Regasm 會失敗但不會另行告知。最佳的解決方法是手動從 \bin 目錄加入組件。另一個解決方法是使用 RegisterSelfReg。
此外,請確定您是透過 Regasm/Codebase 來手動註冊組件。如果您的組件不在共用位置中,除非它與呼叫程式碼位於相同的目錄,否則就找不到該組件。/Codebase 會將目錄輸入登錄中。
如何使用記錄檔疑難排解 Windows Installer 安裝問題?
Windows Installer 會將安裝程式時發生的相關作業記錄在記錄檔中。此記錄檔位於 .msi 檔所在的目錄中。
執行這項作業的方法有兩種:
-
假設先前安裝的產品 Product 1 已安裝而且含有名為 MyFile.txt 的檔案。
-
使用 ORCA (從 Windows Installer SDK) 檢視檔案表,然後找出表示 MyFile.txt 的資料列。
-
記下 Component_ column 的值,然後開啟元件資料表。
-
在此元件資料表中,找出 Component 資料行中含有適當之 Component_ value 的資料列,並取得 ComponentID。將此值複製到 [剪貼簿] 中。接著關閉 ORCA。
-
在您的安裝專案中,開啟 [啟動條件編輯器],並加入 Windows Installer 元件搜尋。針對新搜尋的 [ComponentID] 屬性貼上您在上一個步驟中所複製的 [ComponentID]。
-
複製 [Property] 屬性。它應該看起來像 COMPONENTEXISTS1。
-
開啟 [檔案系統編輯器] 並選取 [應用程式資料夾]。
-
將 [DefaultLocation] 屬性編輯成如同 [COMPONENTEXISTS1]MySubFolder (由於 COMPONENTEXISTS1 中的路徑結尾含有 '\')。
在上述步驟 6 之後,您可能會想要將條件加入 [啟動條件編輯器],以便查看是否找到此元件;如果沒有找到,便會封鎖安裝及顯示訊息。此條件應該是 COMPONENTEXISTS1 (這表示如果 COMPONENTEXISTS1 不是空的,便可以執行 Installer)。
若要將自訂的 Web 資料夾安裝到不是預設情況下指定的通訊埠,請從命令列執行安裝。此命令必須包含每個 Web 自訂資料夾的 [Property] 屬性值,通常值會類似 NEWWEBPROPERTY1。此外,您也必須加入 Web 應用程式資料夾的 TARGETPORT。
例如,如果您的 Web 伺服器使用通訊埠 20,您的命令列看起來應該如下:
msiexec /i mywebsetup.msi TARGETPORT=20 NEWWEBPROPERTY1PORT=20
上述命令只適用於一個 Web 資料夾,如果您有一個以上的 Web 資料夾,請依上述指定方式為每個資料夾加入更多的 PROPERTY=VALUE 組,將每個列出之資料夾的通訊埠重新導向指定的通訊埠。
您可能會想要移除 [安裝位址] 對話方塊,因為如果有人在安裝時於使用者介面中變更此通訊埠,自訂 Web 資料夾就會使用命令列的值。
若要安裝至網站的根目錄 (例如 c:\inetpub\wwwroot),請在 Web 安裝專案中或在安裝時,將 [VirtualDirectory] 設為空字串。
如何將 ServicedComponent 安裝至 GAC 並在 COM+ 資料庫目錄中加以設定?
如果您嘗試將 ServicedComponent 安裝至全域組件快取 (GAC),並在 COM+ 資料庫目錄 (Catalog) 中加以設定,您可能會收到下列編譯錯誤:
"Unable to build custom action named 'Primary output from RegServer (Active)' because the file's Folder property is set to Global Assembly Cache."
系統不支援這種安裝,因為當自訂動作在執行時,GAC 中的組件並非隨時可用 (GAC 認可)。
解決方法就是將您的程式碼放入不同的檔案,然後盡可能將自訂動作程式碼放入不會進入 GAC 的檔案。不過有時候,您無法使用這種方式散發程式碼。
-
建立包含下列程式碼的 .vbs 檔:
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run """" & Property("CustomActionData") & """",7,False
Set WshShell = Nothing
-
開啟安裝專案,並移至 [自訂動作編輯器]。
-
選取 [認可] 節點,然後按一下滑鼠右鍵,並加入新的 [自訂動作]。
-
在檔案系統中瀏覽,以便加入您在步驟 1 中建立的 .vbs 檔。
-
加入下列文字來編輯 [CustomActionData] 屬性,其中 YourApp.exe 就是啟動應用程式檔的名稱:
[TARGETDIR]
YourApp.exe
-
在安裝專案的目錄中,建立新的 Uninstall.bat 檔。
-
在安裝專案中,複製 [ProductCode] 屬性 (如同 [12345678-1234-1234-1234-123412341234] 的值)。
-
編輯 Uninstall.bat,讓它包含下列這一行程式碼,其中 ProductCode 就是您在步驟 2 中複製的值:
Msiexec /x ProductCode
-
將 Uninstall.bat 加入至安裝專案的應用程式資料夾中。
-
以滑鼠右鍵按一下 Uninstall.bat,然後按一下 [建立捷徑] 即可建立捷徑。
-
將捷徑放置在安裝專案的適當 [開始] 功能表資料夾中。
-
將此捷徑重新命名為類似 "Uninstall Application Name" 的名稱。
如需如何使用安裝專案的範例,請參閱 Windows Installer 部署逐步解說。
如需如何在安裝期間修改電腦安全性的詳細資訊,請參閱 MSDN 文件<Increasing Permissions for Web-Deployed Windows Forms Applications>,網址為 http://msdn.microsoft.com/library/en-us/dnforms/html/winforms11122002.asp。
如何規劃 .NET Framework 架構應用程式的部署?
這份指南會提供您針對 .NET Framework 架構應用程式規劃及實作有效部署的必要資訊:<部署 .NET Framework 架構的應用程式>,網址為 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/dalgroadmap.asp (英文)。
哪裡可以下載 Windows Installer SDK?
您可以從 Platform SDK 網站下載 Windows Installer SDK:
http://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&displaylang=en
哪裡可以取得 Crystal Reports 的更新和說明?
您可以從 BusinessObjects.com 網站的 Downloads 頁面來安裝更新的軟體和合併模組:
http://support.businessobjects.com/fix/downloads_updates.asp
哪裡可以取得啟動載入器以便協助透過應用程式安裝 .NET Framework?
您可以在下列位置找到 Microsoft .NET Framework Setup.exe 啟動載入器 (Bootstrapper) 範例:
http://www.microsoft.com/downloads/details.aspx?FamilyID=bf253cfd-1efc-4fc5-ba7e-6a6f21403495&displaylang=en
您可以在下列位置找到 Visual Studio .NET Framework 啟動載入器外掛程式:
http://workspaces.gotdotnet.com/vsboot
如果您在建置安裝和部署專案時收到「無法復原的建置錯誤」錯誤訊息,請閱讀下列文件:
<PRB:當您建置安裝和部署專案時,出現「無法復原的建置錯誤」錯誤訊息>,網址為 http://support.microsoft.com/?id=329214。
如果您收到類似 An error occurred when validating. HRESULT = '80040155' 的錯誤訊息,請參閱<PRB:當您建置安裝和部署專案時,出現「無法復原的建置錯誤」錯誤訊息>文件,網址為 http://support.microsoft.com/?id=329214,並依照「遺失登錄」標題底下的步驟執行。
位於 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vstechart/html/vbtchUsingCustomActionsToModifyInternetInformationServerDuringDeployment.asp?frame=true 的文件<Modifying Internet Information Services During Deployment with Custom Actions>會說明如何修正許多問題,包括:
-
如何修改無法在 [檔案系統編輯器] 之 Web 資料夾上使用 IIS 資料夾的設定。
-
如何部署同時使用 Visual Basic 6.0 和 Visual Basic .NET (含) 以後版本的混合應用程式。
-
部署 Visual Studio .NET (含) 以後版本的應用程式與 Visual Basic 6.0 應用程式之間的變更。
哪裡可以找到 "No Touch Deployment" 的相關資訊?
請參閱<No-Touch Deployment in the .NET Framework>,網址為 http://msdn.microsoft.com/library/en-us/dv_vstechart/html/vbtchno-touchdeploymentinnetframework.asp。
如需使用 Visual Studio .NET 部署 ASP.NET 應用程式的詳細資訊,請參閱<使用 Visual Studio .NET 部署 ASP.NET 應用程式>(英文),網址為 http://msdn.microsoft.com/library/default.asp?url=/msdnmag/issues/02/11/ASPColumn/TOC.asp。
下列知識庫文件將會提供有關 Windows Installer 部署問題的詳細資訊:
參考
VirtualDirectory 屬性
概念
部署和相依性
其他部署
其他資源
部署應用程式和元件
Windows Installer 部署逐步解說