您的位置:首页 > 数据库

C# 2005 打包MSDE并且自动附加数据库

2008-06-05 13:58 323 查看
我最近研究了C# 的打包安装,并根据网上的资料成功了。
我参考的是:
http://blog.csdn.net/koenemy/archive/2006/09/29/1306030.aspx
http://www.cnblogs.com/wangsaokui/archive/2004/09/24/9769.html
在此感谢作者!
我总结一下:
下面简单介绍一下如何在工程中添加Microsoft SQL Server 2000 Desktop Engine (MSDE)的自动安装合并模块MSM:
1. 首先你需要下载MSDE2000的sp3安装包。注意是sp3不是sp4。sp4 的我没有试验成功。
下载地址: http://www.microsoft.com/downloads/details.aspx?FamilyId=90DCD52C-0488-4E46-AFBF-ACACE5369FA3&displaylang=zh-cn
2. 下载完成,你可以安装或者用ZIP解压到本地硬盘,将可以看到:Msi、MSM、Setup这3个目录和setup等文件,其中的MSM文件夹中的东东就是本文要介绍的MSDE2000合并模块。
3. 在你的工程中添加一个安装工程(假设为MySetup1),按照正常的步骤添加工程输出(Project Output),选择输出文件(primary output)和内容文件(content files)两项。
4. 添加合并模块(Merge Moudle),选择浏览,指定到你的MSDE的MSM文件夹,选则MSM和msm/1033下的所有的文件(REPL.MSM、REPL_RES.MSM、 DMO_RES.MSM和DMO.MSM可以不选),打开。
5. 设置安装工程的属性(Properties)中的SearchPath,指定为你的MSM所在路径(这时需要添加两个:path/MSM和path/MSM/1033和path/MSM/2052)。
6. 设置关于安装程序的其他属性咱们暂且不提,这是可以对你的安装工程进行编译了,当编译通过后,你可以在MySetup1/Debug/看到你的打包工程MySetup.msi。
7. 这是工程打包告一段落,下面我们需要修改打好的安装包,使它可以在安装完程序后自动安装MSDE的一个实例(假设实例名为:MyServer)。现在我们需要用到MS的一个工具ORCA,下载地址:http://support.microsoft.com/default.aspx?scid=kb;EN-US;255905安装了orca后就可以利用这个工具对我们的MySetup1.msi进行修改了。网址不对的话自己在网上随便下一个就行。
8. 用ORCA打开安装包文件MySetup.msi,
修改如下:
InstallExecuteSequence表
GetSqlStates.XXXXXX 103->421
InstallInitialize 1800->1799
RemoveExistingProducts 1825->1800
InstallUISequence表
GetSqlStates.XXXXXX 103->421
Property表添加
SqlInstanceName: MSDEDH实例服务名
SqlSecurityMode: SQL 用SQL模式登录
SqlSaPwd: sa的密码
DISABLENETWORKPROTOCOLS=0:网络访问的话也要加这项
注意:GetSqlStates.XXXXXX 后面的X代表一串字符。例如:我的里面是,GetSqlStates.2D02443E_7002_4C0B_ABC9_EAB2C064397B 你主要是找到GetSqlStates这部分。
9.至于附加数据库 自己做一个 安装类,进行自定义安装时附加数据库就行了。
public override void Install(IDictionary savedState) { base.Install(savedState); //启动windows服务 new System.ServiceProcess.ServiceController("MSSQL$MYSERVER").Start(); //附加数据库 SqlConnection Connection = new SqlConnection("password=**;user id=sa;data source="+SystemInformation.ComputerName); SqlCommand Cmd = new SqlCommand("sp_attach_db",Connection); Cmd.CommandType = CommandType.StoredProcedure; SqlParameter loginname=Cmd.Parameters.Add("@dbname",SqlDbType.NVarChar,20); loginname.Value ="yourname"; SqlParameter nickname=Cmd.Parameters.Add("@filename1",SqlDbType.NVarChar,50); nickname.Value =Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)+"yourname.mdf"; SqlParameter password=Cmd.Parameters.Add("@filename2",SqlDbType.NVarChar,50); password.Value =Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)+"yourname.ldf"; Connection.Open(); Cmd.ExecuteNonQuery(); Connection.Close(); }
10。OK
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: