我win项目中遇到的安装以及自定义快捷方式及快捷键的实现方法

首先我的需求是:

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);
}

不過當錯誤發生時,卻會出現以下第二張圖的錯誤訊息:

Error 1001. 安裝過程發生錯誤

Error 1001. 在安裝的復原階段發生例外狀況。將略過此例外狀況,而繼續復原。然而,復原完成之後,電腦可能將無法完全還原成原來的狀態。 –> savedState 字典沒有包含預期的值,而且可能已經損毀。

如果是英文訊息的話,錯誤訊息如下:

Error 1001. An exception occurred during the Rollback phase of the installation. This exception will be ignored and the rollback will continue. However, the machine might not fully revert to its initial state after the rollback is complete. --> The savedState dictionary does not contain the expected values and might have been corrupted.

 

 

測試了一段時間後才發現,原來引發 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);
}

相關連結

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值