我开发了一个使用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文件放在其他地方吗?或者我完全以错误的方式处理事情?
答案 0 :(得分:3)
这是我最终实施的完整解决方案。
希望这可以让未来任何开发人员的生活更加轻松,具有类似的要求。
答案 1 :(得分:2)
有几种方法可以解决这种情况。
如果您的应用程序仅执行从程序文件中读取文件。您只需要在管理员权限下运行安装程序包(右键单击它,然后选择以管理员身份运行)。您的Db将被写入预期的位置。
如果您需要对文件执行IO操作(读/写),则需要将所有文件放入Program Data文件夹
<强> Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)强>
或当前用户的数据文件夹
**Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)**
干杯。