使用SQL Server Express部署桌面应用程序

时间:2012-06-21 03:35:21

标签: .net sql-server-express setup-project

我开发了一个使用SQL Server Express 2005数据库的C#4.0桌面应用程序。我已经构建了一个安装和部署(msi)软件包,它将应用程序及其所有依赖项(包括mdb数据库文件)安装到Program Files目录下的工作文件夹中。

连接字符串是这样的:

Server=.\SQLExpress;AttachDbFilename=|DataDirectory|MyDB.mdf;Database=MyDB;integrated security=true;user instance=true;

第一次进行数据库调用时,数据库将连接到本地SQL Server Express实例。

安装程序在XP计算机上按预期工作,但是,在Windows 7计算机上测试时,在第一次进行数据库调用时会抛出异常,这表示对包含mdb文件的文件夹没有足够的权限。

在Windows XP和Windows 7之间,Windows似乎已锁定Program Files子文件夹的权限。 我可以通过设置安装目录的完全权限来解决问题,但这似乎是作弊。

所以我的问题是: 我该如何配置此应用程序的设置和部署包? 我做得对吗?我只需要向应用程序目录中的所有用户授予完全权限吗?如果是这样,我如何使用VS2010设置和部署包实现此目的? 或者我应该将mdb文件放在其他地方吗?或者我完全以错误的方式处理事情?

2 个答案:

答案 0 :(得分:3)

这是我最终实施的完整解决方案。

  • 在“设置和部署”项目的“文件系统”部分中,我将SQL Server数据库文件(MDF)添加到“公用应用程序数据”文件夹中。这不是[右键单击]文件系统在目标机器\添加特殊文件夹菜单(由于某种原因)的可选选项之一,所以我必须从该菜单中选择自定义文件夹,然后在默认位置属性中,放“[ COMMONAPPDATAFOLDER] [生产] [产品名称]”。这使得公共应用程序数据文件夹中的文件夹位于我的产品的目标计算机(C:\ Program Data \ for Win 7)上。
  • 我需要所有用户都能够完全访问此文件夹,以便SQL Server数据库文件成功附加并正常工作,因此下一步是更改此文件夹的权限。
  • 我能找到的唯一方法是为安装和部署项目编写自定义操作。此链接提供了有关如何创建和添加自定义操作的详细信息:http://thedotnetway.blogspot.com.au/2008/10/creating-setup-project-in-vs-2008-w.html
  • 此链接提供需要放入Custom Actions overridden Install方法的代码: C# - Set Directory Permissions for All Users in Windows 7
  • 我在自定义操作代码中使用了System.Environment.GetFolderPath(System.Environment.SpecialFolder.CommonApplicationData)来指定Common Application Data文件夹。

希望这可以让未来任何开发人员的生活更加轻松,具有类似的要求。

答案 1 :(得分:2)

有几种方法可以解决这种情况。

  1. 如果您的应用程序仅执行从程序文件中读取文件。您只需要在管理员权限下运行安装程序包(右键单击它,然后选择以管理员身份运行)。您的Db将被写入预期的位置。

  2. 如果您需要对文件执行IO操作(读/写),则需要将所有文件放入Program Data文件夹

    <强> Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)

  3. 或当前用户的数据文件夹

    **Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)**
    

    干杯。