您必须获取使用 ClickOnce 安装的应用程序快捷方式的路径,该快捷方式在Environment.GetFolderPath(Environment.SpecialFolder.Programs)\PublisherName目录中创建,或者以编程方式创建。我发现的所有东西要么不起作用,要么不适合。
UPD:有什么意义。使用 ClickOnce 安装时,您的应用程序将启动,您进行设置,退出应用程序,重新启动 - 一切正常,设置在那里。您以编程方式获取Application.StartupPath,将此路径放入注册表中的自动运行或在启动中创建快捷方式,但是当您打开 PC 时没有设置时会出现惨败,一切都是默认的,需要重新配置。通过从指定Application.StartupPath的快捷方式启动应用程序,我们可以获得与从 ClickOnce 安装程序创建的快捷方式启动应用程序所指定的应用程序设置不同的应用程序设置。如何!
对于 clickonce 应用程序和大多数应用程序来说,最不幸的想法是将配置文件存储在可执行文件旁边。如果可以在发布构建阶段进行必要的设置并且仅在紧急情况下进行更改,这是完全可以接受的,但是如果用户可以随意更改它们,最好将它们移动到单独的固定位置,独立于位置的可执行文件。
另外,clickonce 更新机制的构建方式是,如果您的配置文件在更新版本中较新,则可以在更新期间覆盖您的配置文件,对于上次修改日期的文本文件。这种行为的原因很简单,在更新的应用程序的配置中可能会有额外的参数,没有这些参数将无法正常工作,因此最简单的方法是用新配置覆盖旧配置。
最可悲的是,可以在项目属性中配置或显式添加的 app.config 或 Settings 等标准工具涉及在可执行文件旁边存储具有默认设置的文件。当然,您可以将缺少的内容添加到生成的类中,它会按您的意愿工作,但默认情况下实现是最小的,MSDN 上的描述相当微薄,尽管如果您真的想,您可以弄清楚在 Settins 对象的参数中写入什么以及在何处写入,以便它开始的行为至少有点有意义(此外,MS 自己最终放弃了这个想法,并且默认情况下提供了一个更轻量级且易于理解的 app.config)。
总之,您需要确保您的应用程序在配置后不会在更新期间丢失设置。重新安装等 常规工具不允许这样做,这意味着您必须编写自己的管理器(好吧,或者完成 MS 的设置空白)。但是,如果您或客户偏执,您可以选择方便的存储设置格式,至少是加密的二进制文件。
有两个可能的位置来存储配置:Windows 注册表(CurrentUser 配置单元,因此不需要管理员权限)和
%APPDATA%. 在这两种情况下,操作逻辑大致相同,针对读取/写入设置值的方法进行了调整:我们检查文件夹
%APPDATA%\<AppName>\或所需注册表项的存在。检查文件夹中是否存在必要的配置文件、注册表项中的键。
(可选)检查配置版本。
如果找到必要的文件/注册表项并且版本合适,请加载设置并照常工作。
如果版本不适合,我们从默认设置中读取必要的内容,如有必要,我们要求用户澄清参数。
如果找不到文件/注册表项,请创建一个文件夹和文件,为用户运行配置器,或者简单地从默认设置开始。
正如你所看到的,在这个方案中没有提到“第一次”和“后续”发射。根本没有必要这样做。即使由于某些其他原因意外删除和/或强制重新安装应用程序,这种方法也不允许您丢失设置(如果有足够的毅力,您也可能会抵制重新安装操作系统,但这是一个单独的问题) .
这种方法的另一个优点是,该文件夹以及 clickonce 应用程序所在的最终文件夹位于用户配置文件中,这意味着该应用程序和设置将可供任何机器上的用户使用,如果您有域,域中的一台机器,并且该域配置了漫游用户配置文件。
如何准确读取和保存设置取决于您选择的格式。在最简单的情况下,您可以简单地将具有默认设置的 *.config 文件从包含可执行文件的文件夹复制到新位置并在那里进行更改。
有关 clickonce 应用程序当前安装的更多信息,请使用ApplicationDeployment类。一般来说,如果您决定使用 clickonce,您应该阅读更多有关其功能的信息。
Environment.GetFolderPath(Environment.SpecialFolder.Programs)\PublisherName\AppName\AppName.appref-ms以任何方便的方式添加指向应用程序的链接以自动运行。使用上述存储设置的方法,您描述的问题将不会出现,因为它们不再与应用程序启动点相关联。这种用于存储配置的方案非常适用于经典安装模型、自写更新程序/安装程序,当然还有 clickonce 应用程序。具体来说,clickonce 对我来说是最新的,过渡不需要任何更改。
是在第一次启动时自行创建的,但在设置中您可以指定放置应用程序的路径
您在启动时错误地注册了应用程序。不得通过 .exe 文件启动 ClickOnce 应用程序
要运行应用程序,请使用
这是网站英文版的略微修改的解决方案。
让我解释一下 - ClickOnce 应用程序,由于可能部署在网络上,所以使用的不是程序的当前目录,而是
System.Deployment.Application.ApplicationDeployment.CurrentDeployment.DataDirectory. 通过快捷方式启动时,它会被初始化。通过 .exe 启动时 - 不。