为64位Windows机器创建构建时出现“访问数据库文件不被允许”错误
我正在创建一个已运行良好多年的现有Windows桌面应用程序的新版本。该应用程序使用SqlServerCe数据库,该数据库安装在机器的DataDirectory中。正在创建新版本的应用程序以与64位机器兼容。我已将代码迁移到在Macbook上运行Windows 10的Parallels VM,并使用Visual Studio 2017构建新版本。构建工作正常(我正在使用安装向导项目创建安装文件)。但是,当我安装应用程序时,第一次访问数据库时出现错误。为64位Windows机器创建构建时出现“访问数据库文件不被允许”错误
错误提示: 不允许访问数据库文件。 [1884,文件名= C:\ ProgramData \ CompanyName \ ApplicationName \ AppDataBase.sdf,SeCreateFile]。
.sdf未标记为只读。如果我转到.sdf文件,一旦安装它,并向每个人(使用文件资源管理器)授予读取,写入和修改权限,那么应用程序可以访问该文件并且没有错误。但是,如果我尝试从我的代码中使用File.SetAccessControl执行此操作,则会再次出现访问错误。我没有看到任何方式在安装过程中使用安装向导功能(文件系统视图)在.sdf文件上设置权限。
这里是我使用的连接字符串:
<connectionStrings>
<add name="ApplicationName.Properties.Settings.ApplicationNameConnectionString"
connectionString="Data Source=|DataDirectory|AppDataBase.sdf"
providerName="Microsoft.SqlServerCe.Client.4.0" />
</connectionStrings>
该建筑使用Visual Studio 2010和x86机器上进行部署时工作得很好。提前感谢您提供的任何建议。
本质上 - 您的位置错误。针对Windows 7(及更高版本)的文件夹%SystemDrive%\ProgramData\MyCompany\MyApp
默认为只读,用于非管理员用户,应该用于机器配置。我建议你阅读
正确的位置(我假设立足于事实,这是一个应该在多个用户共享数据库文件)是每个机器“文档”
用户在用户间使用的 应用程序中创建/打开/关闭/保存的“文档”类型文件。这些通常是公共文件的模板或 。
示例:MyTemplate。点
的Windows 7:C:\用户\公用
Vista的:的%SystemDrive%\用户\公共
XP:%ALLUSERSPROFILE%\文件
环境变量:
Vista的/ Win7:%PUBLIC%注意:XP上不存在
已知的文件夹ID:FOLDERID_PublicDocuments
System.Environment.SpecialFolder:System.Environment.SpecialFolder.CommonDocuments
CSIDL:CSIDL_COMMON_DOCUMENTS
听起来像它可能是UAC
确保您正在运行的exe文件(不是MSI),并且你在LaunchConditions特权设置为True,您的安装项目
另外,还要确保你右键单击并选择“以管理员身份运行”运行应用程序
为什么不直接使用%APPDATA%?
非常感谢!这就是我一直在寻找的!我删除了处理ProgramData位置的代码中的任何内容,并删除了旧版的Deployment项目作为发布应用程序的方式。然后,我使用项目的发布功能(在检查完所有设置后),并且它工作正常!非常感谢。我没有看到任何让我知道文件夹位置发生变化的事情,所以我很久以来就一直在努力。 – rogdawg