I require a MSI Custom action that copies a file from the MSI source directory

喜欢而已 提交于 2019-12-19 03:39:34

问题


I'm creating a installer for a c# windows project using VS 2008. I'm trying to write a custom action that copies a settings file from the source directory of the MSI file stored on a file server (e.g. \server\fileshare\myappinstaller\mysetting.xml) to the target directory on the computer on which my application is been installed (e.g. C:\Program Files\My App).

The settings file can't be added in to the installer as it will contain settings with will be unique to the customer installing the app.

Does anyone have code (preferably C# or VB.NET) for such a custom action? Alternately does anyone know how to get the MSI source location (e.g. \server\fileshare\myappinstaller) within a custom action.

Many thanks


回答1:


I have solved this by adding

/InstallerPath="[OriginalDatabase]"

to the CustomActionData of the Custom Action (in the Tab Custom Actions of the Setup Project) and reading the value with this code in the Custom Action:

    Public Overrides Sub Commit(ByVal savedState As System.Collections.IDictionary)
        MyBase.Commit(savedState)

        Dim directoryOfMSI As String = IO.Path.GetDirectoryName(Context.Parameters("InstallerPath"))

        'Do your work here
        '...

    End Sub

Ciao! Stefan




回答2:


I would recommend you to add the XML file to the installer as one of the components to be installed. That would be the easiest way and would not require a custom action.

WiX might be an option for you. It allows you to customize XML configuration files during installation using XmlConfig.




回答3:


I do a similar thing, but ship a default configuration inside the MSI file and then use a MST to add the custom configuration file. It's much more reliable as everything is "native" to windows installer and I just need to send out a small custom MST to each customer.

More information on how I'm doing this can be found over at Simplest solution to replace a tiny file inside an MSI?




回答4:


Normally custom actions in WindowsInstaller use something from the tables of the msi to put something into any table of the msi.

Additionally the WindowsInstaller-Team declines any managed extensions for the installers, reasons for that are found everywhere on the net.

But, I did some time ago figure out an extension to create managed custom actions for WindowsInstallers, usable with WiX, that works still, but there is a newer solution on top of that work, a real extension for WiX to allow managed custom actions.



来源:https://stackoverflow.com/questions/368154/i-require-a-msi-custom-action-that-copies-a-file-from-the-msi-source-directory

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!