VS2010製作網站自定義安裝程式
最近在把一個網站打包成安裝程式,這方面的文章網上有很多,也看了不少,但因為開發環境的不同,遇到了一些問題,便寫下這篇文章記下整個流程(有很多資源都來自網際網路,由於條目頗多,所以無法說明其來處,敬請諒解)。
一、開發環境
言歸正傳,先說明一下開發環境,win7 64位+visual studio 2010+IIS7。
二、製作流程
1、釋出網站
要製作網站自定義安裝程式,首先,我們得有一個準備打包的網站。我這裡是一個ASP.NET網站。接下來就要對這個網站進行預編譯,右擊“解決方案資源管理器”的網站,選擇“釋出網站”,即可將網站釋出到本地機器上。預編譯主要是將網站的原始碼編譯成相應的動態連結庫。
2、新建“安裝專案”
接下來,在vs中開啟“新建專案”->“其他專案型別”->“安裝和部署”->“Visual Studio Installer”,選擇“安裝專案“,命名MyWebSite。“Web安裝專案”也可進行網站安裝程式的製作,但相對“安裝專案”,其安裝過程不好控制(雖然“安裝專案”也有一些控制不到的地方,但目前已足夠)。
在“安裝專案”有如下按鈕:檔案系統編輯器、登錄檔編輯器、檔案型別編輯器、使用者介面編輯器、自定義操作編輯器、啟動條件編輯器。
3、新增安裝時顯示的對話方塊
開啟“使用者介面編輯器”,分為安裝與管理員安裝兩個部分
右鍵點選“啟動”節點,選擇“新增對話方塊”,依次新增“自述檔案”、“許可協議”、“文字框(A)”、“複選框(A)”,如下圖所示。
這裡先介紹文字框和複選框的設定,點選“文字框(A)”,在“屬性”視窗中則可看到其相應設定(其他對話方塊類似),現列舉出各選項含義,
BannerBitmap:此文字框的橫幅圖片,即下圖banner所指的那張圖片,可以為bmp或jpg格式。後面會講如何設定。
BannerText:相當於此文字框的標題
BodyText:Banner下對此文字框作用的說明
Edit1Label:輸入框上的標題
Edit1Property:輸入框的屬性值,要獲得輸入框的內容,就得通過它
Edit1Value:輸入框預設顯示的內容
Edit1Visible:輸入框可見性,false即隱藏
複選框(A)設定與文字框(A)類似,只是其中CheckBox1Value值有點區別,如果勾選了某個複選框,則該複選框CheckBox1Value值為Checked(程式獲得值為1),不選則為Unchecked(程式獲得值為空)。
4、新建安裝類庫
自定義安裝的程式碼即在此類庫中,它將完成根據使用者輸入的資訊配置IIS站點等功能
“檔案”->“新增”->“新建專案”->“Visual C#”->“Windows”,選擇“類庫”,命名為“WebSetupClassLib”,刪除自動生成的Class1.cs。
右鍵點選類庫名,“新增”->“新建項”->“Visual C#”項(常規),選擇“安裝程式類”,命名為“MyWebInstaller”。
檢視MyWebInstaller的程式碼,安裝程式類其實是繼承自Installer類(實現自定義安裝的關鍵)的區域性類:
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Configuration.Install;
- using System.Linq;
- namespace WebSetupClassLib
- {
- [RunInstaller(true)] //安裝程式集時呼叫自定義操作安裝程式
- public partial class MyWebInstaller : System.Configuration.Install.Installer
- {
- public MyWebInstaller()
- {
- InitializeComponent();
- }
- }
- }
5、新增自定義操作(相當於安裝類庫與程式安裝等行為的連線)
先暫且不管安裝程式類,右鍵單擊安裝類庫,選擇“生成”。
接著右鍵單擊安裝專案“MyWebSite”,選擇“新增”->“專案輸出”,選擇安裝類庫WebSetupClassLib(出現前提是執行上一步的“生成”),如下圖。
此時,安裝專案“MyWebSite”下將多了兩項,一個是“主輸出來自WebSetupClassLib(活動)”,另一個是“檢測到的依賴項”下多了一個“Microsoft .NET Framework”(因為安裝類庫WebSetupClassLib的目標框架是.NET Framework 4,安裝專案需要提供對它的支援)。
然後點選安裝專案的“自定義操作編輯器”,裡面有四個類似於資料夾的項,分別為安裝、提交、回滾、解除安裝。提交指安裝完後的動作,回滾指安裝不成功程式回滾執行的動作。
右擊“安裝”,選擇“新增自定義操作”,在彈出的“選擇專案中的項”對話方塊中選擇應用程式資料夾,選中“主輸出來自WebSetupClassLib(活動)”,確定。
這樣在安裝時,程式就會自動執行安裝類庫中的自定義安裝操作(如:Install函式)。
同樣的方式,在“提交”和“解除安裝”也加入“主輸出來自WebSetupClassLib(活動)”,回滾暫時沒用到,不用加。
6、獲取使用者輸入資訊
在自定義安裝操作前,先得知道在安裝程式類“MyWebInstaller”中如何獲取網站安裝過程中使用者輸入的資訊(如web伺服器地址,埠)。
切換到“自定義操作”->“安裝”專案下,點選“主輸出來自WebSetupClassLib(活動)”,在“屬性”視窗有個“CustomActionData”選項。
在其中填入:/port=[PORT] /iis=[IISSERVER] /targetdir="[TARGETDIR]\"
[]內是屬性名,如在文字框(A)中,有
Edit1Label:web伺服器地址
Edit1Property:IISSERVER
Edit1Value:192.168.1.100
“web伺服器地址”的屬性名就是Edit1Property的值IISSERVER
“web伺服器地址”的值就自動賦給了iis,[TARGETDIR]是安裝路徑,程式定義,不是自定義,需如此書寫"[TARGETDIR]\",每項間必須有空格,根據需要自行加入。
在MyWebInstaller中獲得值:string webIP = this.Context.Parameters["iis"].ToString(); //web伺服器IP
即獲得了使用者輸入的“web伺服器地址”,如192.168.1.12。
注意:在獲取使用者所選安裝路徑時,string physicaldir = this.Context.Parameters["targetdir"].ToString(); //網站物理路徑
假設路徑是“D:\test\”,則physicaldir的值是“D:\\test\\\\”(\\中一個\是轉義字元,另一個才是表示路徑的\),所以,實際表 示路徑是“D:\test\\”,顯然不對(test後多了一個\)。
還要進行如下操作:physicaldir = physicaldir.Substring(0, physicaldir.Length - 1);
這裡中了招,幸好有除錯,才得以解決(但為何獲得的路徑會多個"\"?)。
7、重寫自定義安裝相關方法要安裝時執行自定義動作,就得重寫Installer類中的相關函式(發現函式呼叫順序OnBeforeInstall->OnAfterInstall->Install,猜測可能原因是前兩個是事件,後一個Install是函式,因此前兩個和後一個沒有必然聯絡)。
有兩種方式:
1、public override void Install(IDictionary stateSaver)
2、在建構函式中加入this.BeforeInstall += new InstallEventHandler(MyWebInstaller_BeforeInstall);
然後定義函式private void MyWebInstaller_Install(object sender, InstallEventArgs e){//自定義安裝程式碼}
但是此法不針對Install,如this.Install += new InstallEventHandler(MyWebInstaller_Install);是不對的,因為Install只是一個方法而已,而非事件。
A、重寫安裝(Installer)方法
安裝方法中包括以下內容:獲取使用者輸入資訊、新建IIS應用程式池、新建IIS站點、配置IIS站點、設定網站目錄許可權、修改web配置檔案、網站ID寫入登錄檔、建立桌面快捷方式、建立應用程式選單項。
- #region 程式安裝
- publicoverridevoid Install(IDictionary stateSaver)
- {
- base.Install(stateSaver);
- //System.Diagnostics.Debugger.Launch();
- physicaldir = this.Context.Parameters["targetdir"].ToString(); //網站物理路徑
- physicaldir = physicaldir.Substring(0, physicaldir.Length - 1);
- virtualdir = this.Context.Parameters["virtualdir"].ToString(); //網站虛擬路徑
- dbname = this.Context.Parameters["dbname"].ToString(); //資料庫名
- dbserver = this.Context.Parameters["dbserver"].ToString(); //資料庫伺服器名稱
- user = this.Context.Parameters["user"].ToString(); //資料庫連線使用者
- pwd = this.Context.Parameters["pwd"].ToString(); //資料庫連線密碼
- iis = this.Context.Parameters["iis"].ToString(); //web伺服器IP
- port = this.Context.Parameters["port"].ToString(); //站點埠
- websitename = this.Context.Parameters["websitename"].ToString(); //即站點名
- isrun = this.Context.Parameters["run"]; //安裝完成後是否執行
- NewWebSiteInfo siteinfo = new NewWebSiteInfo(iis, port, "", websitename, @physicaldir);//@意為忽略轉義字元含義
- CreateNewWebSite(siteinfo);
- SetFileRole();
- WriteWebConfig();
- WriteToReg("WebSiteID");
- if (this.Context.Parameters["deskcut"] == "1") //建立桌面快捷方式
- {
- CreateDeskTopCut();
- }
- if (this.Context.Parameters["pmenu"] == "1") //建立應用程式選單項
- {
- CreateProCut();
- }
- }
- #endregion
在安裝類庫WebSetupClassLib中,新增一個類,類名為NewWebSiteInfo,該類主要是管理站點相關資訊,包括站點IP、埠號、站點名等等。程式碼如下:
- namespace SetupClassLibrary
- {
- publicclass NewWebSiteInfo
- {
- privatestring hostIP; // 主機IP
- privatestring portNum; // 網站埠號
- privatestring descOfWebSite; // 網站表示。一般為網站的網站名。如"www.myweb.com.cn"
- privatestring nameOfWebSite;// 網站名稱。如"我的網站",此處即為在IIS管理器中的網站名稱
- privatestring webPath; // 網站的主目錄。例如@"e:\\ mp"
- public NewWebSiteInfo(string hostIP, string portNum, string descOfWebSite, string nameOfWebSite, string webPath)
- {
- this.hostIP = hostIP;
- this.portNum = portNum;
- this.descOfWebSite = descOfWebSite;
- this.nameOfWebSite = nameOfWebSite;
- this.webPath = webPath;
- }
- publicstring BindString
- {
-
相關推薦
VS2010製作網站自定義安裝程式
最近在把一個網站打包成安裝程式,這方面的文章網上有很多,也看了不少,但因為開發環境的不同,遇到了一些問題,便寫下這篇文章記下整個流程(有很多資源都來自網際網路,由於條目頗多,所以無法說明其來處,敬請諒解)。 一、開發環境 言歸正傳,先說
自定義cs程式安裝介面
http://www.crifan.com/achieve_fixed_install_path_while_install_software_when_make_msi_installer/ 製作C#的msi的Installer時候,固定安裝路徑,不需要使用者選擇路徑
使用WiX Toolset建立.NET程式釋出Bootstrapper(安裝策略管理)(二)——自定義安裝
自定義產品解除安裝方式 繼續從上一次的基礎上前進,現在我們已經知道了最簡單的bootstrapper打包方法,現在我們對其中的每個節點深入自定義,爭取可以達到我們需要的效果。先把最後全部的XML貼出來。 <?xml version="1.0" en
mysql-5.7.18版本(二進制包安裝)-自定義安裝路徑
mysql linux lnmp mysql-5.7.18版本(二進制包安裝)-自定義安裝路徑安裝路徑:/application/mysql-5.7.181.前期準備mysql依賴libaioyum install -y libaio創建用戶mysql,以該用戶的身份執行mysqluseradd
自定義安裝apache+php+mysql+phpmyadmin
conf sql 功能模塊 安裝apache visual pre 數據庫 html 壓縮包 apache 安裝完後訪問 http://localhost/ php 核心包(用於支持php開發 ) VC6就是legacy Visual Studio 6 compiler,就
centos自定義安裝pip3
ans hud ttys ali 2.7 執行文件 -m 問題: jpg 題記 在之前的文章centos雲服務器安裝Python3記錄 記錄了怎麽自定義安裝 Python3 ,在後邊測試pip3的時候發現了個問題: pip --version terminal 打印:
MFC 單文件自定義exe程式左上角圖示
我使用的是vs2012。 1、首先新建一個單文件工程 2、開啟MainFrm.cpp,在OnCreat()函式中return 0;之前新增下列語句: TCHAR path[100]; GetCurrentDirectory(255,pa
自定義控制檯程式匯出角色對實體的許可權為Excel檔案
本人微信公眾號:微軟動態CRM專家羅勇 ,回覆282或者20181116可方便獲取本文,同時可以在第一間得到我釋出的最新博文資訊,follow me!我的網站是 www.luoyong.me 。 先上圖讓大家看效果。許可權列沒有值則代表沒有授予這個許可權,1為個人級別,2為業務部門級別,3為上:下級業務部門
運維 office2016自定義安裝
office20
自定義小程式popupwindow彈出框
在上方彈出 wxml <view class="zan-dialog {{ showDialog ? 'zan-dialog--show' : '' }}"> <view class="zan-dialog__mask" bindtap=
關於Microsoft SQL Server Management Studio自定義安裝時不能更改安裝路徑或只能更改一個或兩個問題的解決
1.首先,肯定你在裝SQLServer之前裝了VS,然後你的C盤裡面會在裡面新建了SQLServer的資料夾,所以你在後面裝SQLServer的時候只能更改一個路徑。 2.解決方法:解除安裝VS,然後再裝SQLServer,進入控制面板,然後把 這些解除安裝了(我圖片裡面
centOS怎樣強制解除安裝PHP以及自定義安裝PHP
這個是原創的,當然也是在前人的基礎上,自己留個拷貝,其他人也不用再摸索了。 轉載請保留版權資訊謝謝:http://blog.csdn.net/21aspnet/ 很無語,centOS居然php版本才5.1.6,很多開源的CMS無法安裝。 檢視php版本命令: #php
centOS怎樣強制卸載PHP以及自定義安裝PHP
怎樣 tar.gz 安裝 ror php版本 com 過程 版權信息 www 這個是原創的,當然也是在前人的基礎上,自己留個拷貝,其他人也不用再摸索了。 轉載請保留版權信息謝謝:http://blog.csdn.net/21aspnet/ 很無語,centOS居然ph
仿UIAlertController,製作一個自定義的alert
先放一個效果圖: 直接放程式碼 #import <UIKit/UIKit.h> typedef void(^leftBlock)(void); typedef void(^rightBlock)(void); @interface YAlertViewControlle
製作一個自定義的checkbox
一直都不知道checkbox,radio,上傳檔案標籤的樣式怎麼去改。 和平常一樣,頁面的問題還是要去改!不多說了,心累啊!現在就說一下我是怎麼解決這個問題的。 1.這個是一開始的頁面(注意記住密碼前面的checkbox): 2.這個是最終完成後的樣式(是不是覺得瞬間高大
inno setup軟體--教你如何製作一個漂亮的安裝程式
當我們製作好一個課件或程式的時候就會想給它做漂亮的安裝程式,特別是用AUTHORWARE製作的課件,由於必須把XTRAS目錄下相關的檔案與可執行檔案一起提供,這時我們就需要給課件製作安裝程式。而且製作的安裝程式應該能夠進行反安裝、能在桌面放置快捷圖示、能在程式組建立組,最好
基於安卓5.0水波紋效果製作及自定義水波紋顏色
安卓5.0以後很多ui效果的改進都是為提高使用者體驗,其中水波紋效果是5.0以後是在互動方式中做的特殊處理 接下來學習一下水波紋的簡單使用及水波紋顏色的自定義。 首先佈局檔案中給控制元件設定為可點
NSIS 自定義安裝介面準確獲取安裝進度完美解決方案
友情提醒:隨著7zip版本快速更新,nsis7z外掛已經不能全面相容新版,使用本例子請將7zip版本降至9.2x以下並下載最新版nsis7z.dll! ----------------------------------------------------------
[office]修改office2016安裝位置,自定義安裝需要的功能
下載新版本office2016後發現安裝過程 沒有自定義安裝 預設安裝路徑在C盤 而我只需要安裝Word,PowerPoint,Excel,其他功能都用不著 C盤也快被撐爆了 步驟: 2.下載並執行微軟提供的Office2016部署工具 會生成2個檔案:
通過nsis和duilib實現自定義安裝介面
nsis用於實現安裝邏輯,duilib用於實現UI介面 通過nsis呼叫duilib生成的dll庫來實現。現擷取部分duilib程式碼用於展示如何使用duilib編寫程式碼。 cpp檔案如下: #include <windows.h> #i