确保在不重复代码的情况下执行dll所需的安装操作

本文关键字:dll 安装 操作 执行 情况下 代码 确保 | 更新日期: 2023-09-27 18:10:42

我有一个c#解决方案,有两个常规项目和一个设置项目。其中一个常规项目是可执行文件,而另一个是dll,我也在其他解决方案中使用它。dll项目依赖于某个事件日志源,它可以记录到该事件日志源,并且由于该程序旨在由不允许创建日志源的用户运行,因此必须在安装时创建该源。

我通过为我的可执行项目创建一个安装程序类,在安装程序中创建日志源,并在安装项目的自定义操作中包含该安装程序来完成此操作。这是有效的,但现在我必须为每个其他项目创建一个类似的安装程序,也使用该dll。

最好的解决方案是,如果我可以为dll编写一个安装程序,然后在安装项目中为自定义操作选择dll。这样,我只需要说明一次日志创建需求。但是,我无法为安装项目中的自定义操作选择dll项目输出。

另一个好的解决方案是,如果我能以某种方式指定可执行程序的安装程序应该是可传递的,这样它也会为可执行程序所依赖的任何项目执行安装操作,但我不知道如何指定该要求。

那么我怎么做才能避免在不同的项目之间重复安装代码呢?

确保在不重复代码的情况下执行dll所需的安装操作

您应该能够将安装程序类添加到DLL中,然后注册DLL以在安装项目中执行自定义操作。如果您尝试过这个并遇到问题,您可以更具体地说明您使用的是哪个版本的Visual Studio和哪种类型的安装项目吗?

我只是有一个MyApplication。安装程序集,其中放置了创建事件源的自定义操作。我的所有安装项目都引用此程序集并调用其自定义操作。

这个怎么样?您可以创建一个简单的批处理文件或powershell脚本来创建您想要创建的日志文件。您可以为dll文件制作一个安装程序(甚至是整个解决方案,这并不重要)。然后可以调用刚才从安装程序中编写的批处理文件。[参考此处]。这样,您就不会为依赖文件/资源复制创建逻辑;基本上,你可以为多个安装项目使用相同的批处理文件(只要它们使用相同的资源)

我希望这能回答你的问题。更进一步,你的客户处于什么样的环境?他们还在使用windows XP(SP2或以前版本)吗?如果是这样的话,你必须做一些类似于你现在已经想到的事情。然而,如果不是这样,如果你的客户端是在win7上,你可以使用nuget来发布你的bin(参考这里)。我承认这仍然被看作是一个源代码共享解决方案。但是我相信这种方法也可以扩展到发布二进制文件。