获取第三方Click-Once应用程序的config文件夹

时间:2014-12-14 09:26:59

标签: c++ .net wpf path clickonce

目前我正在搞乱Click-Once WPF应用程序。该应用程序是一些非我开发的第三方应用程序。我也无法访问其来源。

通过执行安装应用程序时在开始菜单路径中放置的相应*.appref-ms链接,定期并自动(使用标准C ++编写的自制启动器)在Windows服务器上运行。这很好。

由于该应用程序周期性出现问题,我的启动程序需要在启动之前擦除所有配置文件,因此我始终可以获得定义良好的运行。这些文件放在应用程序的一个文件夹中。其设置的配置路径如下(我通过手动搜索AppData树找到它):

C:\Users\<UserName>\AppData\Local\Apps\2.0\Data\WM4WPKCW.P5Z\67QVXD6C.0NT\<app>_f6187a2321850a68_0003.0004_1a67f9f1633c43fc\Data\AppFiles\

请注意,此配置路径与应用程序路径(使用不同命名的文件夹)完全不同:

C:\Users\<User>\AppData\Local\Apps\2.0\5HN2CKMO.MPL\YOL20MYR.O8L\<app>_f6187a2321850a68_0003.0004_f6ab8c93b3a43b7c\

由于此配置路径在Click-Once应用程序的每次更新时都会更改,因此我需要自动通过代码(最好是C ++)找到它。不幸的是,我无法想办法做到这一点。

如何让我的启动器根据其*.appref-ms文件找到Click-Once应用程序的配置路径?

1 个答案:

答案 0 :(得分:1)

来自Raghavendra Prabhu’s blog entry “Client Settings FAQ”

  

如果要以编程方式访问路径,可以使用Configuration Management API执行此操作(需要添加对System.Configuration.dll的引用)。例如,以下是如何获取本地user.config文件路径:

Configuration config =  
    ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal);
Console.WriteLine("Local user config path: {0}", config.FilePath);

代码是C#(显然),但不应该很难转换为C ++ / CLI。

Raghavendra Prabhu进一步写道:

  

如果由于某种原因需要将设置存储在其他位置,建议的方法是编写自己的SettingsProvider。这实现起来相当简单,您可以在.NET 2.0 SDK中找到演示如何执行此操作的示例。但请记住,您可能遇到上述相同的隔离问题。

免责声明:我没有对此进行测试。