ภายใต้แพลตฟอร์ม .NET จะสะดวกกว่าในการปรับใช้โซลูชันเว็บ เราสามารถใช้ Visual Studio.NET 2003 เพื่อเพิ่มโปรเจ็กต์การติดตั้ง WEB เพิ่มเอาต์พุตหลักและไฟล์เนื้อหาของโปรเจ็กต์ใน "File System Editor" ที่ปรับใช้ และทำให้โปรแกรมการติดตั้งเสร็จสมบูรณ์ได้อย่างง่ายดาย
อย่างไรก็ตาม โปรแกรมการติดตั้งที่สร้างขึ้นในลักษณะนี้จะติดตั้งเฉพาะไฟล์ DLL ที่รวบรวมโดยเว็บเพจและโปรแกรม ASP.NET ลงในไดเร็กทอรี IIS ของเครื่องเป้าหมาย เหมาะสำหรับแอปพลิเคชันทั่วไป (เช่น ฐานข้อมูล Access ซึ่งสามารถรวมเป็นแพ็คเกจได้ โปรแกรมการติดตั้งร่วมกัน ); หากฐานข้อมูลเป็น SQL SERVER จำเป็นต้องติดตั้งฐานข้อมูลระหว่างการใช้งานและโปรแกรมการติดตั้งจะซับซ้อนยิ่งขึ้นและเราจำเป็นต้องปรับแต่งคลาสโปรแกรมการติดตั้ง ดำเนินการสคริปต์ SQL ในคลาสตัวติดตั้งและเขียนสตริงการเชื่อมต่อไปยัง Web.config
l การติดตั้งฐานข้อมูล
Microsoft MSDN จะแนะนำการสร้างฐานข้อมูลเมื่อปรับใช้แอปพลิเคชัน ตัวอย่างเช่น:
วิธีการนี้คือการสร้างคลาสตัวติดตั้งและเรียกมันในคลาสตัวติดตั้ง ADO.NET รันคำสั่ง SQL (คำสั่ง SQL จะอยู่ในไฟล์ข้อความ) เพื่อสร้างฐานข้อมูล
อย่างไรก็ตาม มีปัญหากับวิธีนี้ หากคุณใช้ SQL Server2000 เพื่อสร้างไฟล์สคริปต์สำหรับตาราง มุมมอง และขั้นตอนการจัดเก็บทั้งหมด และใช้ ADO.NET เพื่อดำเนินการไฟล์สคริปต์นี้ จะมีคำสั่ง "GO" จำนวนมากใน สคริปต์เกิดข้อผิดพลาด แน่นอนเราสามารถแทนที่ "GO" ด้วยอักขระขึ้นบรรทัดใหม่และใช้ ADO.NET เพื่อรันคำสั่ง SQL ทีละตัว แน่นอนว่าประสิทธิภาพนี้ค่อนข้างต่ำ
วิธีที่ดีที่สุดคือการเรียก osql เพื่อรันสคริปต์ (หรือสร้างไฟล์ cmd สำหรับโครงการฐานข้อมูล และไฟล์ cmd ยังเรียก osql เมื่อสร้างฐานข้อมูล)
ใช้ระบบ;
ใช้ System.Collections;
โดยใช้ System.ComponentModel;
โดยใช้ System.Configuration.Install;
โดยใช้ System.Data.SqlClient;
ใช้ System.IO;
โดยใช้ System.Reflection;
โดยใช้ระบบการวินิจฉัย
ใช้ System.Xml;
เนมสเปซ DBCustomAction
-
/// <สรุป>
/// คำอธิบายโดยย่อของ DBCustomAction
/// </สรุป>
[RunInstaller(จริง)]
คลาสสาธารณะ DBCustomAction: System.Configuration.Install.Installer
-
/// <สรุป>
///@ผู้เขียน:overred
/// </สรุป>
ส่วนตัว
= null;
-
// ผู้ออกแบบต้องการการโทรนี้
InitializeComponent();
// TODO: เพิ่มการกำหนดค่าเริ่มต้นใดๆ หลังจากเรียกใช้ InitializeComponent
}
/// <สรุป>
/// ทำความสะอาดทรัพยากรทั้งหมดที่ใช้งาน
/// </สรุป>
ป้องกันแทนที่เป็นโมฆะกำจัด (การกำจัดบูล)
-
ถ้า(ทิ้ง)
-
ถ้า (ส่วนประกอบ != null)
-
ส่วนประกอบทิ้ง ();
-
-
ฐาน ทิ้ง ( ทิ้ง );
-
#region Component Designer สร้างโค้ดแล้ว
/// <สรุป>
/// Designer รองรับวิธีการที่จำเป็น - อย่าใช้โปรแกรมแก้ไขโค้ดเพื่อแก้ไข
/// เนื้อหาของวิธีนี้
/// </สรุป>
โมฆะส่วนตัว InitializeComponent()
-
ส่วนประกอบ = System.ComponentModel.Container ใหม่ ();
-
#endregion
#การตั้งค่าแบบกำหนดเองของภูมิภาค
โมฆะส่วนตัว ExecuteSql (สตริง connString, สตริงชื่อฐานข้อมูล, สตริง sql)
-
SqlConnection conn = SqlConnection ใหม่ (connString);
SqlCommand cmd=ใหม่ SqlCommand(sql,conn);
conn.เปิด();
cmd.Connection.ChangeDatabase (ชื่อฐานข้อมูล);
พยายาม
-
cmd.ExecuteNonQuery();
-
จับ (ยกเว้น e)
-
StreamWriter w=new StreamWriter(@"e:\log.txt",true);
w.WriteLine("===ใน ExecuteSql======");
w.WriteLine(e.ToString());
w.ปิด();
-
ในที่สุด
-
conn.ปิด();
-
}
การติดตั้งโมฆะการแทนที่สาธารณะ (IDictionary stateSaver)
-
createDB();
อัพเดตคอนฟิก();
} }
โมฆะส่วนตัว createDB()
-
พยายาม
-
สตริง connString=string.Format("server={0};user id={1};password={2}",this.Context.Parameters["server"],this.Context.Parameters["user"], this.Context.Parameters["pwd"]);
//สร้างฐานข้อมูลตามชื่อฐานข้อมูลที่ป้อน
ExecuteSql(connString,"master", "สร้างฐานข้อมูล" + this.Context.Parameters ["dbname"]);
// เรียก osql เพื่อรันสคริปต์
string cmd=string.Format(" -S{0} -U{1} -P{2} -d{3} -i{4}db.sql",this.Context.Parameters["server"],นี่ .Context.Parameters["ผู้ใช้"],this.Context.Parameters["pwd"],this.Context.Parameters["dbname"],this.Context.Parameters["targetdir"]);
System.Diagnostics.Process sqlProcess=กระบวนการใหม่();
sqlProcess.StartInfo.FileName = "osql.exe";
sqlProcess.StartInfo.Arguments=cmd;
sqlProcess.StartInfo.WindowStyle=ProcessWindowStyle.Hidden;
sqlProcess.Start ();
sqlProcess.WaitForExit();//กำลังรอการดำเนินการ
sqlProcess.Close();
//ลบไฟล์สคริปต์
System.IO.FileInfo sqlFileInfo=ใหม่ FileInfo(string.Format("{0}db.sql",this.Context.Parameters["targetdir"]));
ถ้า (sqlFileInfo.Exists)
sqlFileInfo.Delete();
-
จับ (ยกเว้น e)
-
StreamWriter w=new StreamWriter(@"e:log.txt",true);
w.WriteLine("===ในการติดตั้ง======");
w.WriteLine(e.ToString());
w.ปิด();
-
}
โมฆะส่วนตัว updateConfig()
-
พยายาม
-
//เขียนสตริงการเชื่อมต่อไปที่ Web.config
System.IO.FileInfo fileInfo=new FileInfo(string.Format("{0}web.config",this.Context.Parameters["targetdir"]))
;
โยน InstallException ใหม่ ("ไม่พบ web.config");
XmlDocument doc=new XmlDocument();
doc.Load(fileInfo.FullName);
bool foundIt=false;
string connString=string.Format("server={0};database={1};user id={2};password={3}",this.Context.Parameters["server"], this.Context.Parameters["dbname"],this.Context.Parameters["user"],this.Context.Parameters["pwd"]);
string enCS=SecurityHelper.EncryptDBConnectionString(connString)
no=doc.SelectSingleNode ("//appSettings/add[@key='connString']");
ถ้า(ไม่!=null)
-
no.Attributes.GetNamedItem("value").Value=enCS;
พบมัน=จริง;
}
ถ้า(!พบมัน)
โยน InstallException ใหม่ ("ไม่พบการตั้งค่า connString ");
doc.Save(fileInfo.FullName);
-
จับ (ยกเว้น e)
-
StreamWriter w=new StreamWriter(@"e:log.txt",true);
w.WriteLine("===ใน updata connstring=tjtj=====");
w.WriteLine(e.ToString());
w.WriteLine(e.StackTrace);
w.ปิด();
-
}
#endregion
-
-