IIS(Internet 信息服務(wù))會保護(hù)某些文件類型,例如 .config 文件和 .mdb 文件。如果應(yīng)用程序有鎖定的文件,請執(zhí)行以下操作啟用對此類文件的下載:
在 inetmgr 中打開 vroot 的“屬性”頁。
在“虛擬目錄”選項(xiàng)卡上單擊“配置”。
您將看到一個應(yīng)用程序映射列表。刪除 .config 擴(kuò)展名的映射以啟用 .config 文件下載。對此列表中希望作為應(yīng)用程序一部分下載的所有其他擴(kuò)展名重復(fù)此操作。
出于安全原因,有些 Web 服務(wù)器的配置會阻止不常用于 Web 內(nèi)容的文件。例如,具有以下擴(kuò)展名的文件可能會被阻止:.dll、.config、.mdf?;?Windows 的應(yīng)用程序通常包含帶有其中一些擴(kuò)展名的文件。如果用戶嘗試運(yùn)行的 ClickOnce 應(yīng)用程序要訪問 Web 服務(wù)器上被阻止的文件,將產(chǎn)生一個錯誤。無需取消對所有文件擴(kuò)展名的阻止,默認(rèn)情況下,每個應(yīng)用程序文件都使用“.deploy”文件擴(kuò)展名發(fā)布。如果使用此選項(xiàng),Web 服務(wù)器只需配置為允許以下三種文件擴(kuò)展名即可:
.application
.manifest
.deploy
但是,可以禁用此選項(xiàng),方法是清除“發(fā)布選項(xiàng)”對話框上的“使用‘deploy’文件擴(kuò)展名”選項(xiàng),這時必須配置 Web 服務(wù)器以允許應(yīng)用程序中使用的所有文件擴(kuò)展名。
有時您必須配置 .manifest、.application 和 .deploy,例如在使用未安裝 .NET Framework 的 IIS 的情況下,或在使用其他 Web 服務(wù)器(例如,Apache)的情況下。
通過 URL 啟動應(yīng)用程序時,Internet Explorer 執(zhí)行 .application 文件的下載。因此,所有通知瀏覽器緩存文件的過期設(shè)置都將有效??蛻舳藭虼硕粰z測新的更新,而是使用 IE 緩存中的 .application。若要確保客戶端在每當(dāng)更新可用時都立即檢測更新,請啟用 IIS 中的“立即過期”選項(xiàng)。
在 IIS 中執(zhí)行此操作:
運(yùn)行 inetmgr 并打開 vroot(或整個服務(wù)器)的“屬性”頁。
單擊“HTTP 標(biāo)頭”選項(xiàng)卡。
單擊“啟用內(nèi)容過期”。
單擊“立即過期”。
重新啟動 IIS。
ClickOnce 支持從任何 HTTP 1.1 Web 服務(wù)器或文件服務(wù)器上安裝應(yīng)用程序。FTP 協(xié)議不受支持。可以使用 ftp:// 協(xié)議發(fā)布應(yīng)用程序,但必須使用 http://、https:// 或 file:// 協(xié)議執(zhí)行安裝。
使用 ClickOnce 時的一個最常見的問題就是 ClickOnce 因配置問題而無法從網(wǎng)絡(luò)服務(wù)器下載文件。如果在 ClickOnce 安裝過程中遇到下載文件的問題,請嘗試使用 Internet Explorer 下載相同的文件。這樣將把問題范圍縮小到 ClickOnce 問題,而不是普通的服務(wù)器/網(wǎng)絡(luò)問題。
如果使用 HTTP 發(fā)布,則您必須具備目標(biāo)服務(wù)器上的管理員特權(quán)(IIS 需要此特權(quán)級別)。如果不使用 HTTP 發(fā)布,則只需具備目標(biāo)路徑上的寫權(quán)限。
向關(guān)閉了“匿名訪問”的遠(yuǎn)程服務(wù)器發(fā)布時,您將收到下面的警告:
"The files could not be downloaded from http://<remoteserver>/<myapplication>/. The remote server returned an error: (401) Unathorized."
若要解決此問題,請?jiān)?Windows 資源管理器中右擊“我的電腦”,然后選擇“管理”。在“計(jì)算機(jī)管理”對話框中,依次打開“服務(wù)和應(yīng)用程序”節(jié)點(diǎn)、“Internet 信息服務(wù)”、“網(wǎng)站”,然后右擊“默認(rèn)網(wǎng)站”。在“默認(rèn)網(wǎng)站屬性”對話框中,單擊“目錄安全性”選項(xiàng)卡,然后單擊“編輯”按鈕。在“身份驗(yàn)證方法”對話框中,選擇“匿名訪問”復(fù)選框。
默認(rèn)情況下,Windows XP SP2 啟用 Windows 防火墻。如果在安裝有 Windows XP 的計(jì)算機(jī)上開發(fā)應(yīng)用程序,仍能從本地 IIS 服務(wù)器發(fā)布和運(yùn)行 ClickOnce 應(yīng)用程序。但是,如果不打開 Windows 防火墻,則無法從其他計(jì)算機(jī)訪問該 IIS 服務(wù)器。若要管理 Windows 防火墻,請從“控制面板”中選擇“Windows 防火墻”。
使用 HTTP 將應(yīng)用程序發(fā)布到 Windows Web 服務(wù)器需要 FrontPage 服務(wù)器擴(kuò)展 (FPSE)。
默認(rèn)情況下,Windows Server 2003 不安裝 FPSE。如果希望使用 Visual Studio 通過具有 FPSE 的 HTTP 將應(yīng)用程序發(fā)布到 Windows Server 2003 Web 服務(wù)器,必須先安裝 FPSE??梢允褂?Windows Server 2003 中的“管理您的服務(wù)器”管理工具完成此工作。
在 HTTP 上發(fā)布時,.application 文件的 MIME 類型應(yīng)為“application/x-ms-application”。如果服務(wù)器上安裝有 .NET Framework 2.0,該類型將自動設(shè)置。如果沒有安裝,則需要為 ClickOnce 應(yīng)用程序 vroot(或整個服務(wù)器)創(chuàng)建 MIME 類型關(guān)聯(lián)。
在 IIS 中執(zhí)行此操作:
運(yùn)行 inetmgr 并打開 vroot(或整個服務(wù)器)的“屬性”頁。
單擊“HTTP 標(biāo)頭”選項(xiàng)卡。
單擊“Mime 映射”部分中的“文件類型”按鈕。
單擊“新建類型”添加一個新類型。在“相關(guān)擴(kuò)展名”中鍵入 application;在“內(nèi)容類型 (MIME)”中鍵入 application/x-ms-application。
重新啟動 IIS。
Windows Server 2003 上的 IIS 會鎖定除某些已知類型(例如 .htm、.html、.txt 等)以外的所有文件類型。要使用此服務(wù)器部署 ClickOnce 應(yīng)用程序,需要更改 IIS 設(shè)置以允許下載 .application、.manifest 以及應(yīng)用程序使用的所有其他自定義文件類型的文件。
在 IIS 中執(zhí)行此操作:
運(yùn)行 inetmgr 并打開該計(jì)算機(jī)節(jié)點(diǎn)的“屬性”頁。
單擊“MIME 類型”按鈕。
單擊“新建”按鈕,然后添加新的擴(kuò)展名和必要的 MIME 類型。
對于 .application 和 .manifest 擴(kuò)展名,MIME 類型應(yīng)為“application/x-ms-application”。對于其他文件類型,MIME 類型應(yīng)為“application/octet-stream”。
如果創(chuàng)建帶有擴(kuò)展名“*”且 MIME 類型為“application/octet-stream”的 MIME 類型,將允許下載未阻止的文件類型的文件。(但是不能下載阻止的文件類型,例如 .aspx 和 .asmx)。
重新啟動 IIS。
發(fā)生 ClickOnce 錯誤時,通常會顯示一個帶有“詳細(xì)信息”按鈕的錯誤對話框。單擊此按鈕將打開該應(yīng)用程序的 ClickOnce 日志文件。請?jiān)诖巳罩疚募胁檎姨囟ㄥe誤信息,該信息將指出何處出錯。如果其中的信息不足以幫助診斷和解決問題,請參考本疑難解答指南中的以下內(nèi)容。
ClickOnce 為每個應(yīng)用程序維護(hù)一個日志文件。該文件存儲在 wininet 緩存中,因此適用于自動清理機(jī)制。
指定自定義日志位置:要使 ClickOnce 將日志寫入到特定位置,請將注冊表項(xiàng) [HKCU\Software\Microsoft\Windows\CurrentVersion\Deployment] "LogFilePath" (STRING) 設(shè)置為一個文件,例如“c:\logs\ClickOnceLog.txt”。確保計(jì)算機(jī)上存在此目錄 (c:\logs)。所有應(yīng)用程序的全部 ClickOnce 日志消息都將寫入此文件。
Visual Studio 發(fā)布負(fù)責(zé)設(shè)置應(yīng)用程序和清單。但是,如果在 Visual Studio 以外更新部署(例如使用 MAGE),則需注意一些問題:
如果更新應(yīng)用程序中的文件,則必須更新應(yīng)用程序清單中對該文件的引用,因?yàn)樵撐募⒏摹?/p>
如果以任何方式更新應(yīng)用程序清單,則必須在部署清單中更新應(yīng)用程序清單引用。當(dāng)使用 MageUI 在部署清單中更新應(yīng)用程序清單引用時,請確?;敬a指向您的應(yīng)用程序清單。MageUI 始終假定應(yīng)用程序清單是一個帶有版本的子目錄,而這一假定不一定總是正確的。
如果以任何方式更新清單,則必須再次對它簽名。
這里介紹當(dāng)您在客戶端發(fā)現(xiàn) ClickOnce 應(yīng)用程序出現(xiàn)意外行為時應(yīng)注意的問題。ClickOnce 部署清單具有一個 deploymentProvider 屬性,該屬性指向安裝應(yīng)用程序和為應(yīng)用程序提供服務(wù)的源位置的完整路徑。
在部署清單中查找下面一行:
<deploymentProvider codebase="http://myserver/myapp.application" />
這行內(nèi)容是在創(chuàng)建 ClickOnce 應(yīng)用程序時設(shè)置的,對于“安裝的”應(yīng)用程序,這是必需的設(shè)置。該設(shè)置中的位置是一個標(biāo)準(zhǔn)位置,ClickOnce 安裝程序從該位置安裝應(yīng)用程序和查找更新。所有應(yīng)用程序文件都將從相對于此路徑的位置安裝。
因此,如果使用 xcopy 命令將 ClickOnce 應(yīng)用程序復(fù)制到不同位置,但不更改 deploymentProvider 屬性,則嘗試下載應(yīng)用程序時 ClickOnce 仍將引用原始位置。
如果希望移動或復(fù)制應(yīng)用程序,則必須也更新 deploymentProvider 路徑,這樣客戶端才能確實(shí)從新位置安裝。對“安裝的”應(yīng)用程序來說這是個普遍問題。對于始終通過原始 URL 啟動的聯(lián)機(jī)應(yīng)用程序,deploymentProvider 為可選設(shè)置。如果設(shè)置了 deploymentProvider,則使用該屬性,否則將使用用于激活應(yīng)用程序的 URL 作為基 URL 下載應(yīng)用程序文件。
請記?。好看胃虑鍐螘r,必須再次對它簽名。
解決方法:很可能是因?yàn)?MIME 類型未在服務(wù)器或客戶端上正確注冊。
首先進(jìn)行檢查,以確保服務(wù)器配置為將 .application 擴(kuò)展名與 MIME 類型“application/x-ms-application”相關(guān)聯(lián)(請參見上面的“服務(wù)器配置”了解詳細(xì)信息)。如果服務(wù)器配置正確,則檢查以確保計(jì)算機(jī)上安裝了 .NET Framework 2.0。如果已安裝 dnprdnlong 但仍出現(xiàn)該問題,請嘗試卸載并重新安裝 Framework,以在客戶端重新注冊 MIME 類型。
解決方法:這表示無法下載 ClickOnce 清單所引用的一個或多個文件。調(diào)試此問題最簡單的方法是嘗試下載 ClickOnce 指出其無法下載的 URL??赡艿脑蛉缦拢?/p>
如果日志文件顯示“(403) Forbidden”或“(404) Not found”,請檢查以確保 Web 服務(wù)器配置為不阻止此文件的下載(請參見上面的“服務(wù)器配置”部分)。
如果服務(wù)器阻止了 .config 文件,請參見下面的“問題:安裝具有 .config 文件的 ClickOnce 應(yīng)用程序時發(fā)生下載錯誤”。
請檢查是否由于部署清單中的 deploymentProvider URL 指向的位置不是用于激活應(yīng)用程序的 URL 而導(dǎo)致了此問題(有關(guān)更多信息,請參見上面的“使用部署提供程序的注意事項(xiàng)”)。
請檢查服務(wù)器以確保所有文件都存在;ClickOnce 日志會指出找不到的文件。
檢查是否存在網(wǎng)絡(luò)連接問題;如果下載期間客戶端計(jì)算機(jī)脫機(jī),您將收到此消息。
基于 Visual Basic Windows 的應(yīng)用程序默認(rèn)包含一個 app.config 文件。當(dāng)用戶嘗試從安裝有 Windows Server 2003 的 Web 服務(wù)器安裝時將出現(xiàn)問題,原因是該操作系統(tǒng)會出于安全原因而阻止安裝 .config 文件。要允許安裝 .config 文件,請單擊“發(fā)布選項(xiàng)”對話框中的“使用‘.deploy’文件擴(kuò)展名”。
還需要相應(yīng)地設(shè)置 MIME 類型。如果在使用 IIS,請?jiān)?Windows 資源管理器中右擊“我的電腦”,再選擇“管理”。依次打開“服務(wù)和應(yīng)用程序”、“Internet 信息服務(wù)”,再右擊“網(wǎng)站”,然后選擇“屬性”。
單擊標(biāo)簽為“MIME 類型”的按鈕。在“MIME 類型”對話框中,為 .application、.manifest 和 .deploy 文件添加 MIME 類型。
有關(guān)更多信息,請參見上面的“服務(wù)器配置”部分中的“啟用鎖定文件擴(kuò)展名的下載”。
解決方法:確保更新了清單文件并再次對它簽名。使用 Visual Studio 重新發(fā)布應(yīng)用程序,或使用 Mage 再次對該應(yīng)用程序進(jìn)行簽名。
解決方法:如果 Internet 上未簽名的應(yīng)用程序請求升級的信任,通常會出現(xiàn)此對話框。若要允許安裝和運(yùn)行此應(yīng)用程序,請將該 URL 添加到受信任站點(diǎn)列表。可以在 Internet Explorer 中使用“Internet 選項(xiàng)”對話框中的“安全”選項(xiàng)卡完成此操作。
解決方法:可能存在以下原因之一
請檢查部署清單中的 deploymentProvider URL。您是否確定更新內(nèi)容所在的位置與 deploymentProvider 指向的位置相同?(有關(guān)更多信息,請參見上面的“使用部署提供程序的注意事項(xiàng)”。)
請檢查部署清單中的更新間隔。如果設(shè)置的間隔為階段性間隔(例如每六小時一次),ClickOnce 會一直等到此間隔過后才檢查更新。可以更改清單,使之在每次應(yīng)用程序啟動時檢查更新。在開發(fā)時可以使用這一選項(xiàng)方便地驗(yàn)證是否正在安裝更新,但這會減慢應(yīng)用程序的激活速度。
嘗試從“開始”菜單重新啟動應(yīng)用程序。ClickOnce 可能已在后臺檢測到更新,但將在下次激活時提示您安裝。
解決方法:發(fā)生問題的原因可能是 ClickOnce 當(dāng)前使用的是 Internet Explorer 緩存的較舊版本的部署清單,而該版本與服務(wù)器上的最新應(yīng)用程序清單不匹配。為避免此問題,建議將服務(wù)器 vroot(或部署清單)上的 IIS 設(shè)置更改為立即過期,此設(shè)置會強(qiáng)制在每次激活時檢查服務(wù)器。若要在 inetmgr 中進(jìn)行此操作,請選擇 vroot“屬性”頁上的“HTTP 標(biāo)頭”選項(xiàng)卡,然后選中“啟用內(nèi)容過期”框,并設(shè)置為“立即過期”。
或者,可以先重新啟動 Internet Explorer 或清除 Internet Explorer 的“Temporary Internet Files”文件夾,然后再次運(yùn)行該應(yīng)用程序,這將導(dǎo)致一次服務(wù)器重新同步。
解決方法:ClickOnce 使用部署提供程序 URL 獲取應(yīng)用程序的更新。請檢查以確保該 URL 指向的位置正確。(有關(guān)更多信息,請參見上面的“部署提供程序”。)
解決方法:此錯誤信息通常表示將該應(yīng)用程序安裝到 ClickOnce 存儲區(qū)時出錯。要么是應(yīng)用程序出錯,要么是存儲區(qū)損壞。日志文件對出錯位置可能會有更好的指示。
要檢查的內(nèi)容:
檢查部署清單的標(biāo)識、應(yīng)用程序清單的標(biāo)識和主應(yīng)用程序 EXE 的標(biāo)識是否都唯一。
如果應(yīng)用程序包含的文件路徑過長(超過 100 個字符),則可能超出了存儲區(qū)的最大路徑限制。請嘗試縮短路徑并重新安裝。
解決方法:要使用 PrivatePath(合成探測路徑),應(yīng)用程序需要獲得完全信任權(quán)限。請嘗試將應(yīng)用程序清單更改為請求完全信任,然后重試。
解決方法:這通常表示應(yīng)用程序已經(jīng)刪除或存儲區(qū)已損壞。單擊“確定”后,“添加/刪除程序”項(xiàng)將被刪除。
解決方法:GAC(全局程序集緩存)中缺少應(yīng)用程序運(yùn)行所需的一個必備項(xiàng)。
請確保您具備面向目標(biāo)服務(wù)器的發(fā)布權(quán)限。例如,如果您作為普通用戶而不是管理員登錄到終端服務(wù)器計(jì)算機(jī),則您可能沒有權(quán)限發(fā)布到本地 Web 服務(wù)器。
如果使用 URL 發(fā)布,請確保目標(biāo)計(jì)算機(jī)上啟用了 FrontPage 服務(wù)器擴(kuò)展。
您需要在“簽名”對話框中執(zhí)行以下操作:
選擇“使用存儲的證書進(jìn)行簽名”,然后
從列表中選擇一個證書;不會自動選擇第一個證書。
這是一個已知 bug。所有 ClickOnce 清單都需要進(jìn)行簽名。只需選擇其中一個簽名選項(xiàng),然后單擊“確定”即可。
PS:上面的錯誤及解決方案是我轉(zhuǎn)載的,沒有嘗試,大家遇到并有好的解決方法,希望能貼出來共享!