最近自己用wpf寫了一個安裝包,本以為這樣就OK了,可是人家提出,要集成 .net framework 4.0,問題來了,wpf是基於.net framework 4.0,沒有.net framework 4.0怎么運行,
苦苦研究幾天,都沒什么結果,有的人說用C++寫一個,我覺得比較靠譜,可惜C++我只是學了點皮毛,還沒深入,還有用什么飛信框架的,Mono的感覺都不太靠譜,最后突然自己想出了一個辦法,用vs安裝做個外殼,把我的安裝程序包裝在里面,這樣,沒有.net framework的,他會自動提示安裝.net framework,然后再自動運行我的安裝程序,最后我的步驟如下
建立一個安裝項目
1.把安裝文件放入應用程序文件夾
2.右擊-視圖-安裝界面 把里面的子界面全部刪除
3.右擊-添加-項目輸出(項目看下面的解釋,主要用於自動啟動自己做的安裝包)
4.右擊-自定義操作-安裝-添加自定義操作-選擇你添加到項目輸出的那個項目
5.右擊-屬性-系統必備-從與我的應用程序想通位置下載系統必備組件
這樣安裝項目就配置好了
接下添加上面說的項目,用於安裝好 .net framework后自動啟動我自己做的安裝包
1.建個類庫項目
2.右擊項目-添加新項-安裝文件類
3.在類中貼入以下代碼
/// <summary>
/// 功能是做安裝項目主項目輸出
/// 實現安裝過程中的一些操作
/// 如:安裝完成后啟動項目
/// </summary>
[RunInstaller(true)]
public partial class Installe : Installer
{
/// <summary>
/// 應用程序入口
/// </summary>
public static void Main()
{
}
/// <summary>
/// 構造函數
/// </summary>
public Installe()
{
InitializeComponent();
}
/// <summary>
/// 重寫安裝完成后函數
/// 實現安裝完成后自動啟動已安裝的程序
/// </summary>
/// <param name="savedState"></param>
protected override void OnAfterInstall(IDictionary savedState)
{
try
{
base.OnAfterInstall(savedState);
Assembly asm = Assembly.GetExecutingAssembly();
string path = asm.Location.Remove(asm.Location.LastIndexOf("\\")) + "\\";
System.Diagnostics.Process.Start(path + "\\a.exe");//要執行的程序
}
catch (Exception)
{
}
}
/// <summary>
/// 重寫安裝過程方法
/// </summary>
/// <param name="stateSaver"></param>
public override void Install(IDictionary stateSaver)
{
base.Install(stateSaver);
}
/// <summary>
/// 重寫安裝之前方法
/// </summary>
/// <param name="savedState"></param>
protected override void OnBeforeInstall(IDictionary savedState)
{
base.OnBeforeInstall(savedState);
}
/// <summary>
/// 重寫卸載方法
/// </summary>
/// <param name="savedState"></param>
public override void Uninstall(IDictionary savedState)
{
base.Uninstall(savedState);
}
/// <summary>
/// 重寫回滾方法
/// </summary>
/// <param name="savedState"></param>
public override void Rollback(IDictionary savedState)
{
base.Rollback(savedState);
}
}
}
編譯成功后,用上面安裝包說的,添加到安裝包的項目輸出,就OK了。這樣安裝程序只會安裝。net 然后運行我自己的安裝程序,嘿嘿
但是這樣安裝程序,他的外殼也被安裝在計算機了,不過沒事,在你自己的程序卸載的時候,同時把這個外殼程序卸載掉就好了,代碼如下
Process.Start("msiexec", "/uninstall {9FDBD1ED-9792-4FD4-9963-52E5974F05A4} /quiet");
注意:{}里面的是你外殼程序的產品編號,/quiet是靜默卸載的意思,如果去掉,他會提示你是否要卸載此產品
這東西看簡單,其實真的還是用了很多自己的時間,轉載的童鞋,記得保留我的連接http://www.cnblogs.com/linyijia/archive/2013/03/06/2945468.html,不做純粹的伸手黨哦!
