为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
慕桂英546537 2021-11-07 20:34:45
我正在使用 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对象是空的。它没有填充任何属性。我究竟做错了什么?
查看完整描述

1 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

在尝试打开之前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它不会不存在,但配置系统不在这种情况下错误输出(而不是返回一个空的配置对象)。

看来解决这个问题可能有两种选择:

  1. 包括AnotherApp.exe在旁边AnotherApp.exe.config

  2. 使用ConfigurationManager.OpenMappedExeConfiguration,它允许您提供自己ExeConfigurationFileMap的指示配置系统如何定位.config文件。如果您需要这方面的帮助,请告诉我,我将提供一个示例,说明这应该如何工作。


查看完整回答
反对 回复 2021-11-07
  • 1 回答
  • 0 关注
  • 187 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信