2010-03-03 46 views
2

背景 - 我正在寻找使用clickonce通过clickonce(通过网站)部署WinForms应用程序。相对简单的应用程序的元素是: - 它是一个可执行文件和一个数据库文件(sqlite) - 数据库(sqlite)需要有时由应用程序更新(例如添加表,添加列) - 数据库数据这仅仅是一个源码文件)的需求仍然横跨当然升级clickonce - 写入/读取数据目录是否需要管理员权限?

假设 - 我假设在这里,最好的办法,允许上述下clickone是:

  • 使用数据用于sqlite数据库文件位置的目录
  • 写的智慧到MainForm的load方法:
    • 检查是否有必要建立在数据目录(DD)编程(通过ApplicationDeployment.CurrentDeployment.IsFirstRun)的数据库文件,如果没有复制现有从前期区域(其中的ClickOnce应该作出的一个副本)到主DD区
    • 检查数据库文件的版本的DD,然后数据库文件更新

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

谢谢

回答

1

您指定什么样的访问可能需要。例如,下面就可以被添加到app.manifest:

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

去了解的最佳方式是真正考验你是否真的需要管理员权限。如果申请是full trust,那么在任何情况下都不应该有任何问题。

+0

它不会完全信任凯尔,因为它会从网上下载(不是从CD-ROM安装 - 这是他们所说的完全信任) – Greg 2010-03-03 06:42:42

+0

然而,它可以。我们有一个从Web上下载的完全信任的应用程序。 – 2010-03-03 08:07:38

+0

对不起凯尔 - 我一定很慢 - 我还是不太明白我如何确定我是否可以使用数据目录,并且没有任何问题与人们在他们的机器上进行安装有关,而没有适当的权利...你如何确保你的应用程序的完全信任?也许有签署要求? (在这种情况下,我想我的问题是你需要做什么来确保你没有管理权限的人的安装问题) – Greg 2010-03-03 11:13:18

2

我会建议(最简单的做法)是添加文件(我相信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 \是我在我的项目中创建的文件夹, (如果里面有文件是内容的话,它会被复制到可执行文件的路径中),因此我将它包含在路径中。(这是可选的)

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

+0

感谢您的想法 - 我仍然渴望了解数据目录是否有任何特殊的管理要求,因为这似乎是这种数据文件的预期区域(即将其从旧版本复制到.pre区域较新的应用程序,之后你可以访问/复制和应用更新脚本)...你碰巧知道答案? – Greg 2010-03-03 11:10:52

相关问题