我win專案中遇到的安裝以及自定義快捷方式及快捷鍵的實現方法
首先我的需求是:
1、能自動安裝
2、桌面上有快捷方式,並且有快捷鍵,打快捷鍵能自動開啟程式執行
在開發中VS2010自帶的安裝可以將應用放到桌面生成快捷方式,但是有兩個問題:
一是不能自帶快捷鍵,需要手工另外增加;
二是開啟檔案位置找不到安裝目錄。
對於第二個問題我用orca工具設定快捷方式及應用本身的ARGUMENT,才能找到目錄。
但是第一個問題不能解決。
後經咱CSDN友提醒設定自定義安裝,新建安裝專案及安裝類,在建構函式裡寫
BeforeInstall及AfterInstall事件,事件裡面定義快捷鍵、安裝位置、圖示等其他屬性。
後反覆測試不得結果。原因是出錯。但是未提示錯誤。然後一直不得其解,後在一網友的分享中看到了解決方案。後面會補上該網友的分享。
我的解決方案就是通過真值判斷,直接THROW 問題點。一點一點跟蹤解決。問題全在於檔案的目錄上。目錄 一出錯,後面的操作均無效。
另外發現快捷鍵在beforeinstall中生成安裝後,是不起作用的。只有放在afterinstall中才有效。
我遇到的這些問題在網上不好百度到,希望分享能幫到同樣困惑的你~
補網友分享:
我在 Setup 專案的自訂動作(Custom Actions)裡經常會寫許多判斷,用以檢查安裝過程中一些必要的條件是否成立,例如資料庫是否可正常連線、適當的安裝引數是否有正常傳入、…等等。但是在檢查的過程中若發現條件不足時,正確的回應方式應該要使用
一開始我都是用 override 的方式撰寫自訂動作:
public override void Install(IDictionary stateSaver) { if(...) throw new InstallException("安裝過程發生錯誤"); base.Install(stateSaver); }
不過當錯誤發生時,卻會出現以下第二張圖的錯誤訊息:
如果是英文訊息的話,錯誤訊息如下:
測試了一段時間後才發現,原來引發 InstallException 例外狀況時不能在 base.Install(stateSaver); 之前,否則當例外發生時就會出現這個奇怪的錯誤訊息。
到後來,我就全部改成用「事件」的方式撰寫自訂動作,當然,引發 InstallException 例外狀況時一樣要放在 AfterInstall 這個事件裡,範例程式如下:
public Installer1() { //System.Diagnostics.Debugger.Launch(); InitializeComponent(); this.BeforeInstall += new InstallEventHandler(Installer1_BeforeInstall); this.AfterInstall += new InstallEventHandler(Installer1_AfterInstall); this.Committing += new InstallEventHandler(Installer1_Committing); this.Committed += new InstallEventHandler(Installer1_Committed); this.BeforeUninstall += new InstallEventHandler(Installer1_BeforeUninstall); this.AfterUninstall += new InstallEventHandler(Installer1_AfterUninstall); }
相關連結