c# - 访问 Program Files 目录中的 SQL CE 数据库

标签 c# windows-installer sql-server-ce file-permissions

我读到一点,将 .NET 2.0 SQL CE 数据库放在安装应用程序的程序文件目录中是个坏主意。我遇到了以下错误:

不允许访问数据库文件。 [ 文件名 = C:\Program Files (x86)\MyCompanyName\MyApplicationName\MyCEDatabaseName.sdf ]

所以我听说,把它放在通用应用程序文件中....我不确定它在哪里,而且我读到安装程序可能会以相同的权限将文件放在那里。我还读到有人将他们的文件移到那里并遇到了问题。

当安装程序将文件放在程序文件目录中时,是否可以更改该文件的 ACL?我已经从 MSI 连接到应用程序以收集和设置配置选项。我还没有找到一个很好的例子来说明如何更改一个文件的权限。

然后我读过将其存储在用户的应用程序数据中,但是如果您要“为每个人”安装应用程序,文件会放在哪里?

谢谢你抽出时间....困惑。

最佳答案

我假设您使用的是 MSI 包。在这种情况下,您可以使用解析为“C:\ProgramData”的 CommonAppDataFolder。

但是,这也是每台机器的位置,因此它需要与 Program Files 相同的权限。我想您听说过应用程序数据文件夹 (AppDataFolder),它是每个用户的位置(类似于“C:\Users\\AppData\Roaming”)。它没有权限问题。

如果你想使用每台机器的位置,一个解决方案是使用 LockPermissions 表: http://msdn.microsoft.com/en-us/library/aa369774(VS.85).aspx

由于所有权限标志,这有点复杂。因此,如果您的设置创作工具不支持设置权限,我建议采用更简单的方法:使用 xcacls.exe 作为自定义操作: http://support.microsoft.com/kb/318754

这样所有用户都可以访问您的数据库文件。

关于c# - 访问 Program Files 目录中的 SQL CE 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4361621/

相关文章:

.net - 使用 ClickOnce 发布时,为什么 .NET Framework 4 需要 Windows Installer 4.5

本地计算机上多个进程的 SQL CE 文件共享冲突

c# - HttpRequestMessage 的 Content-Type header 中的奇怪行为

c# - 通过 C# 执行外部程序而不显示控制台

c# - 如何使用 Azure Functions 输出绑定(bind)设置服务总线消息的 MessageId?

sql-server - SQL Server Compact Edition 4.0 SDK?

c# - Entity Framework 6 CF : Remove One-to-Many

c# - 将推特流复制到对象 : can I fall behind?

WiX InstanceTransforms 元素产生未解析的引用

vb.net - Installshield自定义对话安装程序