clickonce - 写入/读取数据目录是否需要管理员权限?

时间:2010-03-03 05:45:16

标签: clickonce

背景 - 我正在寻找使用clickonce通过clickonce(通过网站)部署WinForms应用程序。相对简单的应用程序的元素是:   - 它是一个可执行文件和一个数据库文件(sqlite)   - 数据库(sqlite)有时需要由应用程序进行更新(例如添加表,添加列)   - 数据库数据(只是sqlite的文件)需要保留在升级当然

假设 - 我在此假设允许上述点击下方的最佳方式是:

  • 使用数据目录获取sqlite数据库文件的位置
  • 将智能编写到MainForm加载方法中:
    • 检查是否需要以编程方式(通过ApplicationDeployment.CurrentDeployment.IsFirstRun)在数据目录(DD)中创建数据库文件,或者如果不从PRE区域复制现有数据库文件(clickonce应该已经创建了一个数据库文件)它的副本)到主DD区
    • 检查DD中的数据库文件版本,然后更新它

问题 - 是否有任何要求ClickOnce具有特殊访问权限(管理员或提升权限)以读取/写入/形成数据目录?我可以假设最基本的用户PC应该能够做到这一点(家用PC或组织中的工作PC)。

感谢

2 个答案:

答案 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,那么在任何情况下都不应该有任何问题。