逐步解說:建立自訂啟動載入器以顯示隱私權提示
您可以將 ClickOnce 應用程式設定成在組件有更新版本的檔案和組件時自動更新。為確認您的客戶同意此行為,您可以向他們顯示隱私權提示。然後,他們可以選擇是否要授權讓應用程式自動更新。如果不允許應用程式自動更新,則不會進行安裝。
注意事項 |
---|
您的電腦可能會在下列說明中,以不同名稱或位置顯示某些 Visual Studio 使用者介面項目。您所擁有的 Visual Studio 版本以及使用的設定會決定這些項目。如需詳細資訊,請參閱 Visual Studio 設定。 |
必要條件
您需要下列元件才能完成此逐步解說:
- Visual Studio 2010。
建立更新同意對話方塊
若要顯示隱私權提示,請建立要求讀者同意應用程式自動更新的應用程式。
若要建立同意對話方塊
在 [檔案] 功能表上,指向 [新增],然後按一下 [專案]。
在 [新增專案] 對話方塊中,按一下 [Windows],然後按一下 [WindowsForm應用程式]。
在 [名稱] 中,輸入 ConsentDialog,然後按一下 [確定]。
在設計工具中按一下表單。
在 [屬性] 視窗中,將 [Text] 屬性變更為 Update Consent Dialog。
在 [工具箱] 中,展開 [所有 Windows Form],並將 [Label] 控制項拖曳至表單中。
在設計工具中,按一下標籤控制項。
在 [屬性] 視窗中,將 [外觀] 下的 [Text] 屬性變更為下列文字:
您即將安裝的應用程式會在 Web 檢查是否有最新更新。按一下 [我同意],表示您授權應用程式從網際網路自動檢查並安裝更新。
在 [工具箱] 中,將 [Checkbox] 控制項拖曳至表單中央。
在 [屬性] 視窗中,將 [版面配置] 下的 [Text] 屬性變更為 [我同意]。
在 [工具箱] 中,將 [Button] 控制項拖曳至表單左下方。
在 [屬性] 視窗中,將 [版面配置] 下的 [Text] 屬性變更為 [繼續]。
在 [屬性] 視窗中,將 [設計] 下的 [(名稱)] 屬性變更為 ProceedButton。
在 [工具箱] 中,將 [Button] 控制項拖曳至表單右下方。
在 [屬性] 視窗中,將 [版面配置] 下的 [Text] 屬性變更為 [取消]。
在 [屬性] 視窗中,將 [設計] 下的 [(名稱)] 屬性變更為 CancelButton。
在設計工具中,按兩下 [我同意] 核取方塊,產生 CheckedChanged 事件處理常式。
在 Form1 程式碼檔案中,為 CheckedChanged 事件處理常式加入下列程式碼。
Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged ProceedButton.Enabled = Not ProceedButton.Enabled End Sub
private void checkBox1_CheckedChanged(object sender, EventArgs e) { ProceedButton.Enabled = !ProceedButton.Enabled; }
將類別建構函式更新成預設停用 [繼續] 按鈕。
Public Sub New() InitializeComponent() ProceedButton.Enabled = False End Sub
public Form1() { InitializeComponent(); ProceedButton.Enabled = false; }
在 Form1 程式碼檔案中,加入下列程式碼,讓布林值變數檢查使用者是否已經同意線上更新。
Public accepted As Boolean = False
public bool accepted = false;
在設計工具中,按兩下 [繼續] 按鈕,產生 Click 事件處理常式。
在 Form1 程式碼檔案中,將下列程式碼加入至 [繼續] 按鈕的 Click 事件處理常式。
Private Sub ProceedButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ProceedButton.Click If ProceedButton.Enabled Then accepted = True Me.Close() End If End Sub
private void ProceedButton_Click(object sender, EventArgs e) { if (ProceedButton.Enabled) { accepted = true; this.Close(); } }
在設計工具中,按兩下 [取消] 按鈕,產生 Click 事件處理常式。
在 Form1 程式碼檔案中,為 [取消] 按鈕的 Click 事件處理常式加入下列程式碼。
Private Sub CancelButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CancelButton.Click Me.Close() End Sub
private void CancelButton_Click(object sender, EventArgs e) { this.Close(); }
將應用程式更新成在使用者不同意線上更新時傳回錯誤。
僅限 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]。
注意事項 停用應用程式架構會停用諸如 Windows XP 視覺化樣式、應用程式事件、啟動顯示畫面、單一執行個體應用程式等功能。如需詳細資訊,請參閱 專案設計工具、應用程式頁 (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; }
按一下 [建置] 功能表上的 [建置方案]。
建立自訂啟動載入器套件
若要對使用者顯示隱私權提示,您可以建立 Update Consent Dialog 應用程式的自訂啟動載入器套件,並將它包含在所有 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="https://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="https://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 子目錄。
將 Update Consent 應用程式設定為必要條件
在 Visual Studio 中,您可以將 Update Consent 應用程式設定為必要條件。
若要將 Update Consent 應用程式設定為必要條件
在 [方案總管] 中,按一下您想要部署的應用程式名稱。
按一下 [專案] 功能表上的 [ProjectName屬性]。
按一下 [發行] 頁面,再按一下 [必要條件]。
選取 [Update Consent Dialog]。
注意事項 您可能必須關閉並重新開啟 Visual Studio,才能在 [必要條件對話方塊] 中看到 [Update Consent Dialog]。
按一下 [確定]。
建立並測試安裝程式
將 Update Consent 應用程式設定為必要條件之後,您可以產生應用程式的安裝程式和啟動載入器。
若要建立安裝程式,但不按一下我同意進行測試
在 [方案總管] 中,按一下您想要部署的應用程式名稱。
按一下 [專案] 功能表上的 [ProjectName屬性]。
按一下 [發行] 頁,然後按一下 [立即發行]。
如果發行輸出未自動開啟,請巡覽至發行輸出。
執行 Setup.exe 程式。
安裝程式隨即顯示 Update Consent Dialog 軟體授權合約。
閱讀軟體授權合約,然後按一下 [接受]。
Update Consent Dialog 應用程式隨即出現並顯示下列文字:您即將安裝的應用程式會在 Web 檢查是否有最新更新。按一下 [我同意],表示您授權應用程式從網際網路自動檢查並安裝更新。
關閉應用程式或按一下 [取消]。
應用程式隨即顯示錯誤:安裝 <應用程式名稱> 的系統元件時發生錯誤。必須成功安裝所有系統元件,否則安裝程式無法繼續。
按一下 [詳細資料] 顯示下列錯誤訊息:無法安裝元件 Update Consent Dialog,並出現下列錯誤訊息: "The automatic update agreement is not accepted" (使用者未接受自動更新授權合約)。 無法安裝下列元件: - Update Consent Dialog
按一下 [關閉]。
若要建立安裝程式,並按一下我同意進行測試
在 [方案總管] 中,按一下您想要部署的應用程式名稱。
按一下 [專案] 功能表上的 [ProjectName屬性]。
按一下 [發行] 頁,然後按一下 [立即發行]。
如果發行輸出未自動開啟,請巡覽至發行輸出。
執行 Setup.exe 程式。
安裝程式隨即顯示 Update Consent Dialog 軟體授權合約。
閱讀軟體授權合約,然後按一下 [接受]。
Update Consent Dialog 應用程式隨即出現並顯示下列文字:您即將安裝的應用程式會在 Web 檢查是否有最新更新。按一下 [我同意],表示您授權應用程式從網際網路自動檢查並安裝更新。
按一下 [我同意],然後按一下 [繼續]。
應用程式隨即開始安裝。
如果出現 [應用程式安裝] 對話方塊,請按一下 [安裝]。