.NET 安装程序自动安装 SQL 2005 Express






4.77/5 (23投票s)
此项目使开发人员能够创建一个自动安装 SQL 2005 Express 并从中恢复数据库的安装包
引言
程序员经常会遇到这样的问题:
- 包含 SQL Express 2005 的安装和部署项目只能安装默认数据库实例名称 (SQLEXPRESS),而程序员通常希望使用不同的实例名称。在使用安装和部署项目时,这是不可能实现的。
- 当数据库安装完成后,一些安装需要程序员手动指定备份数据库的位置,以便进行恢复,或者大多数情况下程序员会使用 Management Studio 手动完成。
- 恢复时经常会出现问题,因为原始 MDF LDF 位置和恢复目标位置不同,例如:
"[Microsoft][ODBC SQL Server Driver][SQL Server]Directory lookup for the file failed with the operating system error 5(Access is denied.)." or File 'XXX_Log' cannot be restored to 'x:\yyy'. Use WITH MOVE to identify a valid location for the file.
第一个错误通常发生在 SQL 运行恢复时尝试在另一个 SQL 数据库实例(通常是默认实例)中查找路径,但由于没有文件夹访问权限,会生成“拒绝访问”错误。第二个错误发生在原始 MDF 位置和恢复 MDF 位置不同时。
- 程序员希望有一个安装文件,能够自动安装 .NET、Windows Installer、SQL Express。
本项目解决了以上所有问题,使安装文件能够自动安装所需的应用程序,而无需用户了解如何创建数据库、如何恢复、如何配置连接字符串等,应用程序可以自动完成所有这些操作。
步骤
- 下载示例项目,并将其解压到,例如 D:\Software Pekerjaan\Makanan。
- 从 http://download.microsoft.com/download/e/a/4/ea4b699b-bec4-4722-96d3-254580ed7f9e/SQLEXPR32.EXE 下载 SQL 2005 Express Edition。将其复制到任何文件夹,然后从命令提示符 (CMD.exe) 进入包含该文件的文件夹,运行“SQLEXPR32.exe /x”,然后会出现一个窗口询问要提取文件的位置。选择一个位置。
- 将提取的文件和文件夹复制到 MenuMakanan 项目的 bin\debug\SQLEXPR2005 文件夹,该文件夹已包含一个名为 Food_Restore.bak 的文件,这是程序员创建的数据库备份,必须放在那里。
- 现在我们将使用主窗体中的
InstallationSQLEXPR
类,该类在程序员应用程序中显示。例如,程序员有一个启动窗体名为 Login.cs,请按以下方式更改构造函数:public Login() { InitializeComponent(); InstallationSQLEXPR _ins = new InstallationSQLEXPR("Food", "JOHN", "MenuMakanan", "Food", "JOHNKENEDYDAL", "FOOD_RESTORE.BAK"); if (_ins.IsDone == false) _ins.ShowDialog(); if (_ins.IsRestart == true) { Application.Exit(); this.Close(); return; } }
请记住添加 using JohnKenedy.DataAccess
; 以便找到 Installation 类。这个 Installation 类接受 6 个参数,下面我将进行解释:
- 第一个是 Food,这是在安装进度中显示的应用名称。
- 第二个是 JOHN,这是你的计算机名称,你可以简单地使用 "(local)" 替换 "JOHN" 来表示安装是在运行 Setup 的计算机上完成的。
- 第三个是 MenuMakanan,这是将要安装的新数据库实例。使用安装和部署项目时,我们不能将数据库实例命名为 SQLExpress 以外的名称,但使用这个
InstallationSQLEXPR
类,我们可以做到这一点,甚至可以自己指定sa
密码。 - 第四个是 Food,这是应用程序安装的数据库名称。
- 第五个是 JOHNKENEDYDAL,这是新安装的 SQL EXPRESS 的
sa
密码。使用 Management Studio 连接到数据库实例时需要此密码。 - Food_Restore.BAK 是你的数据库备份文件名,存储在 MenuMakanan 项目 bin\debug\SQLEXPR2005 文件夹中。你可以根据需要进行更改。
正如你所注意到的,会有代码检查 IsDone
和 IsRestart
。保留这两个检查不变,因为这是 Installation
类留给我们的条件,用于告诉主 Startup
窗体应该做什么,是关闭应用程序还是显示窗体。
现在编译应用程序。你的编译后的 MenuMakanan.exe 将自动安装你的应用程序,因为配置是 IsInstall=1
和 IsRestart=0
。如果安装成功,该值将都变为 0,应用程序将正常启动。
创建安装和部署项目
- 创建一个新的安装和部署项目,在此示例中已存在名为
SetupMakananSqlExpr
的项目。 - 在应用程序文件夹中,创建一个名为 SQLEXPR2005 的新文件夹。选择从步骤 2(上一节)中提取的所有文件,并将它们拖放到这个新创建的文件夹中。
- 添加你的数据库备份文件,在此示例中是 Food_Restore.bak(来自 MenuMakanan bin\debug\SQLEXPR2005 文件夹,因为 Installation 类在恢复时会在此文件夹中查找备份文件。完成步骤二和三后,它看起来会是这样:
- 现在右键单击
SetupMakanan
项目,选择属性,然后单击“先决条件”按钮。 - 生成整个解决方案,然后生成
SetupMakananSqlExpr
项目。你将在SetupMakananSqlExpr
项目的 debug 文件夹中看到 Setup.exe、SetupMakanan.msi,以及两个新文件夹;一个是 Windows Installer 3_1,另一个是 DotNetFX35,它们是 .NET 的先决条件。
然后选择第二个单选按钮,从我的应用程序的相同位置下载先决条件。单击确定,然后保存。
现在你可以将这些文件刻录到 CD 或压缩以进行分发。Setup 应用程序将安装先决条件,然后将你的应用程序安装到指定文件夹。当用户运行你的应用程序时,它会检查 IsInstall
和 IsRestart
参数以确定是否需要安装数据库。如果需要,它将安装数据库,然后请求重启。重启后,它会再次检查是否需要附加数据库。如果需要,它将附加数据库,最后运行你的应用程序。
当用户安装应用程序时,如果不存在,它将安装 Windows Installer 和 .NET。当您第一次运行应用程序时,它会检查数据库实例是否存在。如果不存在,它将安装数据库实例,并将备份数据库恢复到新的数据库实例。
注释
- 库中的
RestoreDatabase
方法可以恢复数据库,即使备份的原始 MDF 位置与恢复位置不同(不同的数据库实例/PC)。 - 库具有
JohnKenedy.DataAccess
命名空间,必须将其包含在程序员的 Windows Form 项目中。 - SQL 2005 Express 无法安装除 SQLExpress 以外的其他数据库实例,但此库可以实现,因为它使用了
ProcessStartInfo
,并在应用程序安装完成并首次运行时进行安装。 - Microsoft 提供的 SQLEXPR32.exe 必须被提取(使用 /x 选项)才能使用命令行参数进行安装,而此库正是这样做的。
- 用户可以看到 SQL 2005 Express 的安装过程,但用户只需单击“下一步”并查看进度条,而无需进行配置,因为它是由库传递的参数进行配置的。
历史
此库并未完全准备好进行安装,相反,该库具有数据访问功能 - 文章可以在 https://codeproject.org.cn/kb/library/johnkenedy_library.aspx 找到。
我创建了另一篇文章,其中安装 MSDE 并将数据库附加到 MSDE,你可以在 https://codeproject.org.cn/KB/dotnet/_Net_Installer_With_MSDE.aspx?msg=2654769#xx2654769xx. 阅读。