托管代码中的自定义操作dll
如何在不使用非托管中介的情况下从安装程序调用以托管代码(.net)编写的自定义操作dll?
解决方案
回答
.NET / Windows Installer中完全支持此功能
使用VS.NET创建程序集。
将安装程序类添加到项目中,选择"添加新项"。选择安装程序类。
此类派生自System.Configuration.Install.Installer。它具有许多虚拟方法,例如Install()。 Windows安装程序引擎在安装时将调用此方法。
然后,可以将该程序集作为自定义操作添加到Windows Installer项目中。将自定义操作声明为.NET安装程序类的方法取决于我们用于创建安装的工具。
抱歉,这有点简短。
回答
我希望我对具体情况有所了解,但是作为一般性建议,我们可以考虑使用C ++ / CLI解决涉及非托管/托管互操作性的问题:
C ++ :. NET Framework编程最强大的语言
我从经验中知道,我可以将非托管代码"提升"到C ++ / CLI项目中,在这里我可以从任何C#/。NET /托管代码中使用它,但这听起来像我们想做的相反:将托管代码提升到C ++ / CLI项目,然后将其与一些非托管代码链接,并将其公开为传统的非托管DLL(或者安装程序二进制文件)。我不确定在C ++ / CLI中是否可行。
回答
问题的答案取决于我们如何编写安装程序。
对于Visual Studio安装项目,请在其中一个已部署的程序集中创建一个安装程序类。 MSDN文档中对此进行了介绍,例如http://msdn.microsoft.com/zh-cn/library/d9k65z2d(VS.80).aspx
对于Wix项目,可以使用DTF来构建托管的自定义操作,该操作可以完全访问MSI的内容。 Wix可从http://wix.sourceforge.net/获得。
回答
贾里德(Jared)我们能提供一些有关如何完成此工作的信息吗?
Blockquote
我希望我对具体情况有所了解,但是作为一般性建议,我们可以考虑使用C ++ / CLI解决涉及非托管/托管互操作性的问题:
C ++ :. NET Framework编程最强大的语言
我从经验中知道,我可以将非托管代码"提升"到C ++ / CLI项目中,在这里我可以从任何C#/。NET /托管代码中使用它,但这听起来像我们想做的相反:将托管代码提升到C ++ / CLI项目,然后将其与一些非托管代码链接,并将其公开为传统的非托管DLL(或者安装程序二进制文件)。我不确定在C ++ / CLI中是否可行。
Blockquote
我现在正陷在这个问题上。我有一个可以在标准mfc VC中运行的项目,但是我试图将其引入他的c ++ / cli世界中。我遇到的主要问题是无法在CoCreateInstance()调用上加载接口。