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

.net 使用SQL Server Express部署桌面应用程序,.net,sql-server-express,setup-project,.net,Sql Server Express,Setup Project,我开发了一个使用SQLServerExpress2005数据库的C4.0桌面应用程序。我已经构建了一个安装和部署msi包,它将应用程序及其所有依赖项(包括mdb数据库文件)安装到Program Files目录下的一个工作文件夹中 连接字符串如下所示: Server=.\SQLExpress;AttachDbFilename=|DataDirectory|MyDB.mdf;Database=MyDB;integrated security=true;user instance=true; 第一次

我开发了一个使用SQLServerExpress2005数据库的C4.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似乎已经锁定了程序文件子文件夹的权限。 我可以通过设置安装目录的完全权限来解决这个问题,但这看起来像是作弊

所以我的问题是: 我应该如何为此应用程序配置安装和部署包? 我做得对吗?我是否只需要向应用程序目录上的所有用户授予完全权限?如果是这样,如何使用VS2010安装和部署包实现这一点?
或者我应该把mdb文件放在其他地方吗?还是我完全走错了路?

有几种方法可以补救这种情况

如果您的应用程序只是从程序文件中读取文件。您只需要在Administrator下运行安装程序包,右键单击它,然后选择Runasadministrator。您的数据库将被写入预期位置

如果需要对文件执行IO读/写操作,则需要将所有文件放入任一程序数据文件夹

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

或当前用户的数据文件夹

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

干杯。

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

在安装和部署项目的文件系统部分,我将SQL Server数据库文件MDF添加到公共应用程序数据文件夹中。由于某些原因,这不是目标计算机上的[右键单击]文件系统\添加特殊文件夹菜单中的可选选项之一,因此我必须从该菜单中选择自定义文件夹,然后在默认位置属性中,放置[CommonAppDataFolder][Manufacturer][ProductName]。这在通用应用程序数据文件夹中创建了一个文件夹,无论它位于目标计算机C:\Program Data\for Win 7 for my product上的任何位置。 我需要所有用户都能够完全访问此文件夹,SQL Server数据库文件才能成功附加并正常工作,因此下一步是更改此文件夹的权限。 我能找到的唯一方法是为安装和部署项目编写自定义操作。此链接详细介绍了如何创建和添加自定义操作: 此链接提供需要放入自定义操作覆盖的安装方法中的代码: 我在自定义操作代码中使用System.Environment.GetFolderPathSystem.Environment.SpecialFolder.CommonApplicationData来指定公共应用程序数据文件夹。
希望这能让将来有类似需求的开发人员的生活更轻松。

查看:感谢您的建议,bryanmac。我同意在大多数情况下,这是一个很好的解决办法。在我的例子中,我正在部署的数据库预加载了数十万条记录,所以我宁愿预先部署它。谢谢!我已将数据库的位置移动到“公用应用程序数据”文件夹中。对于具有管理员权限的Win7用户,它可以正常工作,不过每次启动程序时,Windows都会弹出一个用户帐户控制窗口,询问程序是否可以对计算机进行更改。当非管理员用户尝试启动它时,会弹出一个类似的表单,但他们需要提供管理员帐户密码才能运行它。有没有办法让所有用户都可以运行该应用程序?如果您已将所有文件移动到“公用应用程序数据”文件夹,则不再需要以管理员的身份运行程序。为了让非管理员用户运行您的程序,您必须在安装应用程序时向访问程序数据文件夹的任何人授予权限。因为在那一刻,你会期待软件的管理权。下面的链接解释了如何向所有用户授予权限查看接受的回答OK,因此我需要向我在“公用应用程序数据”文件夹中创建的文件夹上的所有用户授予权限,以便任何用户都能够运行我的程序。您知道Visual Studio 2010安装和部署包项目是否允许我轻松设置这些权限吗?或者我需要创建一个自定义操作模块,该模块具有您上面提到的代码?谢谢你花时间帮忙。不幸的是,你
必须自己创建自定义安装程序才能向用户授予权限。完成。测试。作品干杯,德雷克夫!