在卸载期间(卸载前)从自定义安装程序访问 AppSettings

2024-02-24

我有一个 VS 解决方案,其结构如下:

  1. 库项目 (.dll)

  2. 使用 #1 库项目的应用程序

我在应用程序 (#2) 中定义了 app.config,它定义了SaveLogsToDirectoryappSettings 中的路径。该值最终被库项目用来保存生成的日志。

api的简单使用System.Configuration.ConfigurationManager.AppSettings["SaveLogsToDirectory"]库中从 app.config 获取值。

图书馆项目有一个自定义的系统.配置.安装.安装程序类定义。当通过控制面板从 Windows 卸载应用程序时,我希望在路径中生成日志保存日志到目录被删除。问题是以下代码仅在卸载执行期间返回 null

System.Configuration.ConfigurationManager.AppSettings["SaveLogsToDirectory"]

我尝试的其他方法之一是使用System.Configuration.ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly())

但在卸载 api 期间Assembly.GetExecutingAssembly()返回对库项目的引用。

我需要有关如何在卸载期间从库访问应用程序程序集的帮助?需要提到的一件事是,我无法向 OpenExeConfiguration api 提供应用程序中定义的类路径,因为该 dll 可以由任何其他应用程序使用,而其他应用程序可能没有定义该类。


作为一个选项,您可以将 dll 设置存储在 dll 的配置文件中,而不是应用程序的配置文件中。

然后你就可以轻松使用OpenExeConfiguration并将dll地址作为参数传递并读取设置。

为了使从应用程序设置中读取内容变得更加容易和和谐,您可以创建类似的以下内容并以这种方式使用它:LibrarySettings.AppSettings["something"]。这是一个简单的实现:

using System.Collections.Specialized;
using System.Configuration;
using System.Reflection;
public class LibrarySettings
{
    private static NameValueCollection appSettings;
    public static NameValueCollection AppSettings
    {
        get
        {
            if (appSettings == null)
            {
                appSettings = new NameValueCollection();
                var assemblyLocation = Assembly.GetExecutingAssembly().Location;
                var config = ConfigurationManager.OpenExeConfiguration(assemblyLocation);
                foreach (var key in config.AppSettings.Settings.AllKeys)
                    appSettings.Add(key, config.AppSettings.Settings[key].Value);
            }
            return appSettings;
        }
    }
}

Notes:以防万一您不想依赖Assembly.ExecutingAssembly当卸载运行时,您可以轻松使用TARGETDIR https://learn.microsoft.com/en-us/windows/win32/msi/targetdir属性指定安装目录。设置一下就够了CustomActionData自定义操作的属性/path="[TARGETDIR]\",然后在安装程序类中,您可以轻松地使用它Context.Parameters["path"]。然后另一方面你知道 dll 文件的名称并使用OpenMappedExeConfiguration通过传递配置文件地址作为参数,读取设置。

要设置自定义安装程序操作并获取目标目录,您可能会发现此分步答案很有用:Visual Studio 安装项目 - 卸载时删除运行时创建的文件 https://stackoverflow.com/a/46787462/3110834.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在卸载期间(卸载前)从自定义安装程序访问 AppSettings 的相关文章

随机推荐