逐步解說:建立具有隱私權提示的自訂啟動載入器
您可以設定 ClickOnce 應用程式,以在具有較新檔案版本和組件版本的組件可供使用時自動更新。 若要確定您的客戶同意此行為,您可以向他們顯示隱私權提示。 然後,他們可以選擇是否要授與應用程式自動更新的權限。 如果不允許應用程式自動更新,則不會安裝。
注意
在本文的某些 Visual Studio 使用者介面項目中,您的電腦可能會顯示不同的名稱或位置。 您使用的可能是不同版本的 Visual Studio 或不同的環境設定。 如需詳細資訊,請參閱將 IDE 個人化。
建立更新同意對話方塊
若要顯示隱私權提示,請建立應用程式,要求讀者同意應用程式的自動更新。
若要建立同意對話方塊
在 [檔案] 功能表上,指向 [開新檔案] ,然後按一下 [專案] 。
在 [新增專案] 對話方塊中,按一下 [Windows],然後按一下 [WindowsFormsApplication]。
在 [名稱] 中,輸入 ConsentDialog,然後按一下 [確定]。
在設計工具中,按一下表單。
在 [屬性] 視窗中,將 [文字] 屬性變更為 [更新同意對話方塊]。
在 [工具箱] 中,展開 [所有 Windows Forms],然後將 [標籤] 控制項拖曳至表單。
在設計工具中,按一下標籤控制項。
在 [屬性] 視窗中,將 [外觀] 底下的 [文字] 屬性變更為下列內容:
您即將安裝的應用程式會檢查網路上的最新更新。 按一下 [我同意],即可授權應用程式從網際網路自動檢查並安裝更新。
在 [工具箱] 中,將 [核取方塊] 控制項拖曳到表單中間。
在 [屬性] 視窗中,將 [版面配置] 底下的 [文字] 屬性變更為 [我同意]。
在 [工具箱] 中,將 [按鈕] 控制項拖曳到表單左下角。
在 [屬性] 視窗中,將 [版面配置] 底下的 [文字] 屬性變更為 [繼續]。
在 [屬性] 視窗中,將 [設計] 底下的 [(名稱)] 屬性變更為 [ProceedButton]。
在 [工具箱] 中,將 [按鈕] 控制項拖曳到表單右下角。
在 [屬性] 視窗中,將 [版面配置] 底下的 [文字] 屬性變更為 [取消]。
在 [屬性] 視窗中,將 [設計] 底下的 [(名稱)] 屬性變更為 [CancelButton]。
在設計工具中,按兩下 [我同意] 核取方塊,以產生 CheckedChanged 事件處理常式。
在 Form1 程式碼檔案中,為 CheckedChanged 事件處理常式新增下列程式碼。
更新類別建構函式,以停用預設 [繼續] 按鈕。
在 Form1 程式碼檔案中,為布林值變數新增下列程式碼,以追蹤終端使用者是否同意線上更新。
在設計工具中,按兩下 [繼續] 按鈕以產生 Click 事件處理常式。
在 Form1 程式碼檔案中,將下列程式碼新增至 [繼續] 按鈕的 Click 事件處理常式。
在設計工具中,按兩下 [取消] 按鈕以產生 Click 事件處理常式。
在 Form1 程式碼檔案中,為 [取消] 按鈕的 Click 事件處理常式新增下列程式碼。
如果終端使用者不同意線上更新,請更新應用程式以傳回錯誤。
僅適用於 Visual Basic 開發人員:
在 [方案總管] 中,按一下 [ConsentDialog]。
在 [專案] 功能表上,按一下 [新增模組],然後按一下 [新增]。
在 Module1.vb 程式碼檔案中,新增下列程式碼。
Module Module1 Function Main() As Integer Application.EnableVisualStyles() Application.SetCompatibleTextRenderingDefault(False) Dim f As New Form1() Application.Run(f) If (Not f.accepted) Then Return -1 Else Return 0 End If End Function End Module
在 [專案] 功能表上,按一下 [ConsentDialog 屬性],然後按一下 [應用程式] 索引標籤。
取消核取 [啟用應用程式架構]。
在 [啟始物件] 下拉式功能表中,選取 [Module1]。
注意
停用應用程式架構會停用視覺樣式、應用程式事件、初始螢幕、單一執行個體應用程式等功能。 如需詳細資訊,請參閱專案設計工具、應用程式頁 (Visual Basic)。
僅適用於 Visual C# 開發人員:
開啟 Program.cs 程式碼檔案,並加入下列程式碼。
static int Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Form1 f = new Form1(); Application.Run(f); if (!f.accepted) return -1; else return 0; }
在 [建置] 功能表上,按一下 [BuildSolution]。
建立自訂啟動載入器套件
若要向終端使用者顯示隱私權提示,您可以為 [更新同意對話方塊] 應用程式建立自訂啟動載入器套件,並將其納入為所有 ClickOnce 應用程式中的必要條件。
此程序示範如何藉由建立下列文件以建立自訂啟動載入器套件:
用來描述啟動載入器內容的 product.xml 資訊清單檔。
用來列出套件當地語系化特定層面的 package.xml 資訊清單檔,例如字串和軟體授權條款。
軟體授權條款的文件。
步驟 1:建立啟動載入器目錄
在 %PROGRAMFILES%\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages 中建立名為 UpdateConsentDialog 的目錄。
注意
您可能需要系統管理權限才能建立此資料夾。
在 UpdateConsentDialog 目錄中,建立名為 en 的子目錄。
注意
為每個地區設定建立新的目錄。 例如,您可以新增 fr 和 de 地區設定的子目錄。 如有必要,這些目錄會包含法文和德文字串和語言套件。
步驟 2:建立 product.xml 資訊清單檔
建立名為 product.xml 的文字檔。
在 product.xml 檔案中,新增下列 XML 程式碼。 請確定您不會覆寫現有的 XML 程式碼。
<Product xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper" ProductCode="Microsoft.Sample.EULA"> <!-- Defines the list of files to be copied on build. --> <PackageFiles CopyAllPackageFiles="false"> <PackageFile Name="ConsentDialog.exe"/> </PackageFiles> <!-- Defines how to run the Setup package.--> <Commands > <Command PackageFile = "ConsentDialog.exe" Arguments=''> <ExitCodes> <ExitCode Value="0" Result="Success" /> <ExitCode Value="-1" Result="Fail" String="AU_Unaccepted" /> <DefaultExitCode Result="Fail" FormatMessageFromSystem="true" String="GeneralFailure" /> </ExitCodes> </Command> </Commands> </Product>
將檔案儲存至 UpdateConsentDialog 啟動載入器目錄。
步驟 3:建立 package.xml 資訊清單檔和軟體授權條款
建立名為 package.xml 的文字檔。
在 package.xml 檔案中,新增下列 XML 程式碼來定義地區設定,並納入軟體授權條款。 請確定您不會覆寫現有的 XML 程式碼。
<Package xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper" Name="DisplayName" Culture="Culture" LicenseAgreement="eula.rtf"> <PackageFiles> <PackageFile Name="eula.rtf"/> </PackageFiles> <!-- Defines a localizable string table for error messages. --> <Strings> <String Name="DisplayName">Update Consent Dialog</String> <String Name="Culture">en</String> <String Name="AU_Unaccepted">The automatic update agreement is not accepted.</String> <String Name="GeneralFailure">A failure occurred attempting to launch the setup.</String> </Strings> </Package>
將檔案儲存至 UpdateConsentDialog 啟動載入器目錄中的 en 子目錄。
針對軟體授權條款建立名為 eula.rtf 的文件。
注意
軟體授權條款應包含授權、擔保、責任和當地法律的相關資訊。 這些檔案應該是地區設定特定的,因此請確定檔案是以支援 MBCS 或 UNICODE 字元的格式儲存。 請洽詢您的法務部門,以了解軟體授權條款的內容。
將文件儲存至 UpdateConsentDialog 啟動載入器目錄中的 en 子目錄。
如有必要,請針對每個地區設定的軟體授權條款建立新的 package.xml 資訊清單檔和新的 eula.rtf 文件。 例如,如果您建立 fr 和 de 地區設定的子目錄,請建立個別的 package.xml 資訊清單檔和軟體授權條款,並將其儲存至 fr 和 de 子目錄。
將更新同意應用程式設定為必要條件
在 Visual Studio 中,您可以將更新同意應用程式設定為必要條件。
若要將更新同意應用程式設定為必要條件
在 [方案總管] 中,按一下您要部署的應用程式名稱。
在 [專案] 功能表上,按一下[ProjectName 屬性]。
按一下 [發佈] 頁面,然後按一下 [必要條件]。
選取 [更新同意對話方塊]。
注意
您可能必須關閉並重新開啟 Visual Studio,才能在 [必要條件對話方塊] 中看到 [更新同意對話方塊]。
按一下 [確定]。
建立及測試安裝程式
將更新同意應用程式設定為必要條件之後,您可以為應用程式產生安裝程式和啟動載入器。
若要建立及測試安裝程式,請按一下 [我同意]
在 [方案總管] 中,按一下您要部署的應用程式名稱。
在 [專案] 功能表上,按一下[ProjectName 屬性]。
按一下 [發佈] 頁面,然後按一下 [立即發佈]。
如果發佈輸出未自動開啟,請瀏覽至發佈輸出。
執行 Setup.exe 程式。
安裝程式會顯示 [更新同意對話方塊] 軟體授權合約。
閱讀軟體授權合約,然後按一下 [接受]。
[更新同意對話方塊] 應用程式隨即出現,並顯示下列文字:即將安裝的應用程式會檢查網路上的最新更新。 按一下 [我同意],您便可以授權應用程式在網際網路上自動檢查更新。
關閉應用程式,或按一下 [取消]。
應用程式會顯示錯誤:安裝 ApplicationName 的系統元件時發生錯誤。 安裝無法繼續,直到所有系統元件都成功安裝為止。
按一下 [詳細資料] 以顯示下列錯誤訊息:[元件更新同意對話方塊] 無法安裝,並出現下列錯誤訊息:「不接受自動更新合約。」下列元件無法安裝: - 更新同意對話方塊
按一下關閉。
按一下 [我同意] 來建立及測試安裝程式
在 [方案總管] 中,按一下您要部署的應用程式名稱。
在 [專案] 功能表上,按一下[ProjectName 屬性]。
按一下 [發佈] 頁面,然後按一下 [立即發佈]。
如果發佈輸出未自動開啟,請瀏覽至發佈輸出。
執行 Setup.exe 程式。
安裝程式會顯示 [更新同意對話方塊] 軟體授權合約。
閱讀軟體授權合約,然後按一下 [接受]。
[更新同意對話方塊] 應用程式隨即出現,並顯示下列文字:即將安裝的應用程式會檢查網路上的最新更新。 按一下 [我同意],您便可以授權應用程式在網際網路上自動檢查更新。
按一下 [我同意],然後按一下 [繼續]。
應用程式即會開始安裝。
如果出現 [應用程式安裝] 對話方塊,請按一下 [安裝]。