首先我的需求是:
1、能自动安装
2、桌面上有快捷方式,并且有快捷键,打快捷键能自动打开程序运行
在开发中VS2010自带的安装可以将应用放到桌面生成快捷方式,但是有两个问题:
一是不能自带快捷键,需要手工另外增加;
二是打开文件位置找不到安装目录。
对于第二个问题我用orca工具设置快捷方式及应用本身的ARGUMENT,才能找到目录。
但是第一个问题不能解决。
后经咱CSDN友提醒设置自定义安装,新建安装项目及安装类,在构造函数里写
BeforeInstall及AfterInstall事件,事件里面定义快捷键、安装位置、图标等其他属性。
后反复测试不得结果。原因是出错。但是未提示错误。然后一直不得其解,后在一网友的分享中看到了解决方案。后面会补上该网友的分享。
我的解决方案就是通过真值判断,直接THROW 问题点。一点一点跟踪解决。问题全在于文件的目录上。目录 一出错,后面的操作均无效。
另外发现快捷键在beforeinstall中生成安装后,是不起作用的。只有放在afterinstall中才有效。
我遇到的这些问题在网上不好百度到,希望分享能帮到同样困惑的你~
补网友分享:
地址:https://blog.miniasp.com/post/2009/04/11/Custom-Actions-notice-in-Setup-Project.aspx
在 Setup 專案中開發自訂動作(Custom Actions)應注意的事
我在 Setup 專案的自訂動作(Custom Actions)裡經常會寫許多判斷,用以檢查安裝過程中一些必要的條件是否成立,例如資料庫是否可正常連線、適當的安裝參數是否有正常傳入、…等等。但是在檢查的過程中若發現條件不足時,正確的回應方式應該要使用 InstallException 類別丟出例外狀況,讓安裝程式進行復原(Rollback)動作,但是這個 InstallException 例外狀況的「發生點」也是挺重要的。
一開始我都是用 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); }
相關連結