【问题标题】:clickonce - does writing/reading to the Data Directory required Admin rights?clickonce - 写入/读取数据目录是否需要管理员权限?
【发布时间】:2010-03-03 17:31:41
【问题描述】:

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

假设 - 我在这里假设在 clickone 下允许上述情况的最佳方法是:

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

问题 - 上面描述了 ClickOnce 是否需要具有特殊访问权限(管理员或提升的权限)来读取/写入/形成数据目录?也就是说,我可以假设最基本的用户 PC 通常应该能够执行此操作(家用 PC 或组织中的工作 PC)。

谢谢

【问题讨论】:

    标签: clickonce


    【解决方案1】:

    我建议(最简单的做法)是将文件(我相信的 SQLLite 数据库)添加为现有资源,右键单击它,转到属性并将构建操作更改为内容,然后复制到输出目录以“复制如果较新”。

    从这里你有两个选择:

    如果您在更新时永远不会更改原始 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\ 是我在项目中创建的一个文件夹(如果其中有内容文件,则会将其复制到可执行路径),因此我将其包含在路径中。 (这是可选的)

    关于管理权限,我在我们的网络上不需要任何管理权限,但我们通过网络驱动器而不是网站部署,但我认为它会是相同的。

    【讨论】:

    • 感谢您的想法 - 但是,我仍然很想了解数据目录是否有任何特殊的管理要求,因为这似乎是此类数据文件的预期区域(即从旧版本到新应用程序中的 .pre 区域,之后您可以访问/复制和应用更新脚本)...您碰巧知道答案吗?
    【解决方案2】:

    您指定事物可能需要的访问权限。例如,可以将以下内容添加到 app.manifest:

    <requestedExecutionLevel level=”requireAdministrator” uiAccess=”false” />

    最好的方法是测试你是否真的需要管理员权限。如果应用程序是full trust,那么无论如何您都不应该有任何问题。

    【讨论】:

    • 它不会完全信任 Kyle,因为它会从网络上下载(不是从 CD-ROM 安装 - 这是他们所说的完全信任)
    • 不过可以。我们从 Web 下载了一个完全信任的应用程序。
    • 抱歉,Kyle - 我一定很慢 - 我仍然不太明白如何确定我是否可以使用数据目录,并且在人们在他们的机器上进行安装时不会遇到任何问题关于没有适当的权利……您如何确保对您的应用程序的完全信任?可能有签名要求吗? (在这种情况下,我想我的问题是你必须做些什么来确保没有管理员权限的人不会遇到安装问题)
    • 仅供参考,您不能在 ClickOnce 部署中请求管理权限;它不会支持它。
    猜你喜欢
    • 2016-02-24
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    相关资源
    最近更新 更多