一步步做自己的webinstall安裝包
更新時間:2012年10月15日 23:31:07 作者:
眾所周知,在VS環(huán)境下自帶的WEBINSTALL項(xiàng)目無法選擇安裝路徑,這讓很多開發(fā)者頭痛不已?,F(xiàn)提供一種辦法供大家參考
1、 為了能更好的操作IIS,先添加個類庫(InstallClassLibrary)到項(xiàng)目中。附代碼
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using System.DirectoryServices;
using System.Diagnostics;
using System.Windows.Forms;
using System.Security.AccessControl;
using System.IO;
namespace InstallClassLibrary
{
[RunInstaller(true)]
public partial class WebInstaller : Installer
{
public WebInstaller()
{
InitializeComponent();
}
public override void Install(IDictionary stateSaver)
{
base.Install(stateSaver);
CreateVirtualDir();//以下代碼為更改網(wǎng)站指定目錄權(quán)限
DirectoryInfo di = new DirectoryInfo("d:\\yourpath\\xml");
if((di.Attributes&FileAttributes.ReadOnly)!=0)
di.Attributes=FileAttributes.Normal;
DirectorySecurity ds=di.GetAccessControl();
ds.AddAccessRule(new FileSystemAccessRule("NETWORK SERVICE",FileSystemRights.Modify,InheritanceFlags.ObjectInherit|InheritanceFlags.ContainerInherit,
PropagationFlags.None,AccessControlType.Allow));
di.SetAccessControl(ds);
//
}
void CreateVirtualDir()
{
try
{
DirectoryEntry root = new DirectoryEntry("IIS://localhost/W3SVC/1/root");
DirectoryEntry newRoot = root.Children.Add("virtualName", root.SchemaClassName);
newRoot.Properties["Path"][0] = "d:\\yourpath"; //this.Context.Parameters["targetdir"];
newRoot.Properties["AppIsolated"][0] = 2; // 值 0 表示應(yīng)用程序在進(jìn)程內(nèi)運(yùn)行,值 1 表示進(jìn)程外,值 2 表示進(jìn)程池
newRoot.Properties["AccessScript"][0] = true; // 可執(zhí)行腳本
newRoot.Invoke("AppCreate", true);
newRoot.Properties["DefaultDoc"][0] = "login.aspx";//設(shè)置起始頁
newRoot.Properties["AppFriendlyName"][0] = "applicationName"; // 應(yīng)用程序名
newRoot.CommitChanges();
root.CommitChanges();
}
catch (Exception ee)
{
MessageBox.Show("虛擬目錄創(chuàng)建失??!您可以手動創(chuàng)建! " + ee.Message + ";" + ee.Source + ";" + ee.TargetSite + ";" + ee.InnerException + ";" + ee.StackTrace, "Error", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, 0);
}
}
}
}
2、添加安裝項(xiàng)目到解決方案中,然后在該安裝項(xiàng)目(Setup)中添加-項(xiàng)目輸出,把WEB內(nèi)容和剛才建立的類庫添加到目錄中。
3、在安裝項(xiàng)目左鍵在屬性窗口中更改制造商,安裝程序的標(biāo)題、是否針對所有用戶安裝、產(chǎn)品名等內(nèi)容。
右鍵-視圖-自定義操作,右鍵安裝-添加自定義操作-應(yīng)用程序文件夾,選擇“安裝類庫(InstallClassLibrary)”,添加完成后,在文件系統(tǒng)中右鍵應(yīng)用程序文件夾設(shè)置默認(rèn)安裝目錄。
若還想去定義更多的用戶安裝數(shù)據(jù),請?jiān)黾佑脩艚缑妗?
復(fù)制代碼 代碼如下:
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using System.DirectoryServices;
using System.Diagnostics;
using System.Windows.Forms;
using System.Security.AccessControl;
using System.IO;
namespace InstallClassLibrary
{
[RunInstaller(true)]
public partial class WebInstaller : Installer
{
public WebInstaller()
{
InitializeComponent();
}
public override void Install(IDictionary stateSaver)
{
base.Install(stateSaver);
CreateVirtualDir();//以下代碼為更改網(wǎng)站指定目錄權(quán)限
DirectoryInfo di = new DirectoryInfo("d:\\yourpath\\xml");
if((di.Attributes&FileAttributes.ReadOnly)!=0)
di.Attributes=FileAttributes.Normal;
DirectorySecurity ds=di.GetAccessControl();
ds.AddAccessRule(new FileSystemAccessRule("NETWORK SERVICE",FileSystemRights.Modify,InheritanceFlags.ObjectInherit|InheritanceFlags.ContainerInherit,
PropagationFlags.None,AccessControlType.Allow));
di.SetAccessControl(ds);
//
}
void CreateVirtualDir()
{
try
{
DirectoryEntry root = new DirectoryEntry("IIS://localhost/W3SVC/1/root");
DirectoryEntry newRoot = root.Children.Add("virtualName", root.SchemaClassName);
newRoot.Properties["Path"][0] = "d:\\yourpath"; //this.Context.Parameters["targetdir"];
newRoot.Properties["AppIsolated"][0] = 2; // 值 0 表示應(yīng)用程序在進(jìn)程內(nèi)運(yùn)行,值 1 表示進(jìn)程外,值 2 表示進(jìn)程池
newRoot.Properties["AccessScript"][0] = true; // 可執(zhí)行腳本
newRoot.Invoke("AppCreate", true);
newRoot.Properties["DefaultDoc"][0] = "login.aspx";//設(shè)置起始頁
newRoot.Properties["AppFriendlyName"][0] = "applicationName"; // 應(yīng)用程序名
newRoot.CommitChanges();
root.CommitChanges();
}
catch (Exception ee)
{
MessageBox.Show("虛擬目錄創(chuàng)建失??!您可以手動創(chuàng)建! " + ee.Message + ";" + ee.Source + ";" + ee.TargetSite + ";" + ee.InnerException + ";" + ee.StackTrace, "Error", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, 0);
}
}
}
}
2、添加安裝項(xiàng)目到解決方案中,然后在該安裝項(xiàng)目(Setup)中添加-項(xiàng)目輸出,把WEB內(nèi)容和剛才建立的類庫添加到目錄中。
3、在安裝項(xiàng)目左鍵在屬性窗口中更改制造商,安裝程序的標(biāo)題、是否針對所有用戶安裝、產(chǎn)品名等內(nèi)容。
右鍵-視圖-自定義操作,右鍵安裝-添加自定義操作-應(yīng)用程序文件夾,選擇“安裝類庫(InstallClassLibrary)”,添加完成后,在文件系統(tǒng)中右鍵應(yīng)用程序文件夾設(shè)置默認(rèn)安裝目錄。
若還想去定義更多的用戶安裝數(shù)據(jù),請?jiān)黾佑脩艚缑妗?
相關(guān)文章
LINQ字符串向datetime 轉(zhuǎn)換時失敗的處理方法
LINQ字符串向datetime 轉(zhuǎn)換時失敗的處理方法,需要的朋友可以可以參考一下2013-03-03
ScriptManager.RegisterStartupScript()方法在ajax頁面無效的解決方法
ScriptManager.RegisterStartupScript()方法在ajax頁面無效的解決方法2010-03-03
asp.net使用ajaxFileUpload插件上傳文件(附源碼)
本文詳細(xì)講解了asp.net使用ajaxFileUpload插件上傳文件,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-12-12
ASP.NET Core Middleware的實(shí)現(xiàn)方法詳解
中間件是組裝到應(yīng)用程序管道中以處理請求和響應(yīng)的軟件。下面這篇文章主要給大家介紹了關(guān)于ASP.NET Core Middleware實(shí)現(xiàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2019-01-01
詳解ASP.NET Core應(yīng)用中如何記錄和查看日志
本篇文章主要介紹了ASP.NET Core應(yīng)用中如何記錄和查看日志,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2016-12-12
ASP.NET?MVC前臺動態(tài)添加文本框并在后臺使用FormCollection接收值
這篇文章介紹了ASP.NET?MVC前臺動態(tài)添加文本框并在后臺使用FormCollection接收的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-08-08
asp.net實(shí)現(xiàn)微信公眾賬號接口開發(fā)教程
這篇文章主要是一篇關(guān)于asp.net實(shí)現(xiàn)微信公眾賬號接口開發(fā)教程,感興趣的小伙伴們可以參考一下2015-12-12
ASP.NET Core2讀寫InfluxDB時序數(shù)據(jù)庫的方法教程
Influxdb是一個開源的分布式時序、時間和指標(biāo)數(shù)據(jù)庫,使用go語言編寫,無需外部依賴,下面這篇文章主要給大家介紹了關(guān)于ASP.NET Core2讀寫InfluxDB時序數(shù)據(jù)庫的相關(guān)資料,需要的朋友可以參考下2018-11-11

