背景 - 我正在寻找使用clickonce通过clickonce(通过网站)部署WinForms应用程序。相对简单的应用程序的元素是: - 它是一个可执行文件和一个数据库文件(sqlite) - 数据库(sqlite)有时需要由应用程序进行更新(例如添加表,添加列) - 数据库数据(只是sqlite的文件)需要保留在升级当然
假设 - 我在此假设允许上述点击下方的最佳方式是:
问题 - 是否有任何要求ClickOnce具有特殊访问权限(管理员或提升权限)以读取/写入/形成数据目录?我可以假设最基本的用户PC应该能够做到这一点(家用PC或组织中的工作PC)。
感谢
答案 0 :(得分:2)
我建议(最容易做到的)是将文件(我相信的SQLLite数据库)添加为现有资源,右键单击它,转到属性并将构建操作更改为内容,然后复制到输出目录“复制if较新的”。
从这里你有两个选择:
如果您在更新时不会更改原始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 \是我在项目中创建的文件夹(如果内部的文件是内容,则会将其复制到可执行文件路径中),这就是我将其包含在路径中的原因。 (这是可选的)
关于管理权限,我在网络上不需要任何行政权利,但我们通过网络驱动器而不是网站进行部署,但我认为它会是相同的。
答案 1 :(得分:1)
您可以指定可能需要的访问权限。例如,可以将以下内容添加到app.manifest:
<requestedExecutionLevel level=”requireAdministrator” uiAccess=”false” />
最好的方法是测试您是否确实需要管理员权限。如果申请是full trust,那么在任何情况下都不应该有任何问题。