背景- 我正在考虑使用 clickonce 通过 clickonce (通过网站)部署 WinForms 应用程序。相对简单的应用程序的要素是:
- 它是一个可执行文件和一个数据库文件(sqlite)
- 数据库(sqlite)有时需要由应用程序更新(例如添加表、添加列)
- 当然,数据库数据(只是 sqlite 的文件)需要在升级过程中保留
假设- 我在这里假设在 clickone 下允许上述操作的最佳方法是:
- 使用数据目录作为 sqlite 数据库文件的位置
- write the smarts into the MainForm load method to:
- 检查是否需要以编程方式在数据目录 (DD) 中创建数据库文件(通过 ApplicationDeployment.CurrentDeployment.IsFirstRun),或者是否需要从 PRE 区域复制现有数据库文件(clickonce 应该在其中复制它) ) 到主 DD 区域
- 检查DD中数据库文件的版本,然后更新
Question - ClickOnce 是否需要具有特殊访问权限(管理员或提升的权限)才能读取/写入/形成上述数据目录?也就是说,我可以假设最基本的用户 PC 通常应该能够执行此操作(家庭 PC 或组织中的工作 PC)。
thanks
我建议(最容易做的)是将文件(我认为是 SQLLite 数据库)添加为现有资源,右键单击它,转到属性并将构建操作更改为内容,然后复制到输出目录到“如果较新则复制”。
从这里您有 2 个选择:
如果您在更新时不会更改原始 SQL 文件,那么您可以保留原样,但如果您希望时不时地进行更改,我建议您执行以下操作:
String appPath = Path.GetDirectoryName(Application.ExecutablePath);
if (!System.IO.File.Exists(appPath + @"\Resources\SQLLite.db"))
{
System.IO.File.Copy(appPath + @"\Resources\SQLLiteIncluded.db", appPath + @"\Resources\SQLLite.db");
}
如果需要,如果程序没有对其可执行路径的写访问权限(大多数情况下都有),您可以复制到当前用户的应用程序数据文件夹
\Resources\ 是我在项目中创建的文件夹(如果其中有内容文件,则会将其复制到可执行路径),因此我将其包含在路径中。 (这是可选的)
关于管理权限,我在我们的网络上不需要任何管理权限,但我们通过网络驱动器而不是网站进行部署,但我认为它是相同的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)