最近在做项目时,将软件打包给技术部门用,里面因为用到数据库,所以最好是在安装文件执行完毕之后,自动还原数据库(sql) 想到了2个方法
- 做成安装包(自定义安装,用数据库备份文件还原)
- 利用sql脚本,生成,但osql还是有限制
这2个方法都是可行的,第二个方法会出现多个文件,第一个方法只有一个安装包; 显然一个方法方便些; 实现思路:
- 找到数据库备份文件
- 安装时还原数据库
- 卸载时删除数据库
重写 public override void Install(IDictionary stateSaver)和public override void Uninstall(IDictionary savedState)方法 自己编写好代码,编译运行,安装,却出现1001错误,找不到数据库备份文件 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Configuration.Install; using System.Collections; using System.Data.SqlClient; using System.IO; using System.Reflection; using System.Threading; using System.Diagnostics; namespace SmartHomeSetup { [RunInstaller(true)] public class Form1 : System.Configuration.Install.Installer { private System.ComponentModel.Container components = null; public Form1() { InitializeComponent(); } protected override void Dispose(bool disposing) { if (disposing) { if (components != null) { components.Dispose(); } } base.Dispose(disposing); } //返回路径 private static string PrepareSQL(string name) { string tempfile = ""; try { Assembly asm = Assembly.GetExecutingAssembly(); Stream fs = asm.GetManifestResourceStream(asm.GetName().Name + "." + name); BinaryReader br = new BinaryReader(fs); tempfile = Path.GetTempFileName(); FileStream fsWrite = new FileStream(tempfile, FileMode.Create); BinaryWriter bw = new BinaryWriter(fsWrite); byte[] data = br.ReadBytes(1024); while (data != null && data.Length > 0) { bw.Write(data); data = br.ReadBytes(1024); } br.Close(); fs.Close(); bw.Close(); fsWrite.Close(); } catch (System.Exception e) { throw e; } return tempfile; } private void InitializeComponent() { components = new System.ComponentModel.Container(); } public override void Install(IDictionary stateSaver) { base.Install(stateSaver); //创建数据库的连接字符串 string DbConnection = "Server=" + Context.Parameters["databaseServer"] + ";" + "Trusted_Connection=true;" + "U>
重新编译,安装OK
|
请发表评论