试图打开他人的应用程序配置文件

我正在使用 C# 和 .NET Framework 4.7 开发 WinForm 应用程序。


使用这个应用程序,我试图从另一个应用程序加载配置文件:


string applicationName = Environment.GetCommandLineArgs()[1];


if (!string.IsNullOrWhiteSpace(applicationName))

{

    if (!applicationName.EndsWith(".exe"))

        applicationName += ".exe";


    string exePath = 

        Path.Combine(Environment.CurrentDirectory, applicationName);


    try

    {

        // Get the configuration file. The file name has

        // this format appname.exe.config.

        System.Configuration.Configuration config =

          ConfigurationManager.OpenExeConfiguration(exePath);

但是ConfigurationManager.OpenExeConfiguration(exePath)抛出异常:


An error occurred while loading the configuration file: The 'exePath' parameter is not valid.

Parameter name: exePath

配置文件AnotherApp.exe.config 存在于文件夹中Environment.CurrentDirectory。我也尝试将其更改为Path.Combine(@"D:\", applicationName);,但出现相同的异常。


如果我在这里添加exe.config, 而不是.exe, 在名称的末尾applicationName += ".exe";,它似乎打开了一些东西:config.FilePathis D:\AnotherApp.exe.config.config。但是config对象是空的。它没有填充任何属性。


我究竟做错了什么?


慕桂英546537
浏览 188回答 1
1回答

慕慕森

在尝试打开之前AnotherApp.exe.config,ConfigurationManager.OpenExeConfiguration检查AnotherApp.exe磁盘上是否存在。这是来源:// ...else {    applicationUri = Path.GetFullPath(exePath);    if (!FileUtil.FileExists(applicationUri, false))        throw ExceptionUtil.ParameterInvalid("exePath");    applicationFilename = applicationUri;}// Fallback if we haven't set the app config file path yet.if (_applicationConfigUri == null) {    _applicationConfigUri = applicationUri + ConfigExtension;}如您所见,exePath最终被传递到FileUtils.FileExists,最终检查是否exePath代表磁盘上的文件。在你的情况,这是AnotherApp.exe,这并没有存在。该throw ExceptionUtil.ParameterInvalid("exePath");语句是您的错误的来源。在我上面包含的源代码中,您可以看到_applicationConfigUri设置为AnotherApp.exe.config(它是绝对路径,但为了简单起见,我使用了相对路径)。当您将 设置exePath为 时AnotherApp.exe.config,代码最终会检查AnotherApp.exe.config它找到的(它认为这是 exe 本身)是否存在。在此之后,_applicationConfigUri被设置为AnotherApp.exe.config.config它不会不存在,但配置系统不在这种情况下错误输出(而不是返回一个空的配置对象)。看来解决这个问题可能有两种选择:包括AnotherApp.exe在旁边AnotherApp.exe.config。使用ConfigurationManager.OpenMappedExeConfiguration,它允许您提供自己ExeConfigurationFileMap的指示配置系统如何定位.config文件。如果您需要这方面的帮助,请告诉我,我将提供一个示例,说明这应该如何工作。
打开App,查看更多内容
随时随地看视频慕课网APP