У меня есть проект Wix, который должен установить мое приложение c#. Исключения File Copy и Firewall уже работают. Теперь я хочу изменить файлы конфигурации json с помощью специального действия. Я хочу прочитать все json файлы, изменить некоторые значения и записать их обратно в программные файлы. Вот мое определение CA:
<CustomAction Id="PrepareConfigurationFilesCustomAction" BinaryKey="InstallerCA" DllEntry="PrepareConfigurationFilesCustomAction" Execute="immediate" Impersonate="no" Return="check" />
<CustomAction Id="CreateConfigurationFiles" BinaryKey="InstallerCA" DllEntry="CreateConfigurationFiles" Execute="deferred" Impersonate="no" Return="check" />
<Custom Action="PrepareConfigurationFilesCustomAction" Before="CreateConfigurationFiles">NOT Installed AND NOT REMOVE</Custom>
<Custom Action="CreateConfigurationFiles" Before="InstallFinalize">NOT Installed AND NOT REMOVE</Custom>
Если я открою .msi wirth Orca, порядок действия ios кажется правильным.
введите описание изображения здесь
InstallFiles 4000
PrepareConfigurationFilesCustomAction NOT Installed AND NOT REMOVE 6598
CreateConfigurationFiles NOT Installed AND NOT REMOVE 6599
Но когда я запускаю .msi, я получаю исключение
Excetion TrownSystem.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Program Files\Vendor\Product\etc\Configurations'.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileSystemEnumerableIterator`1.CommonInit()
at System.IO.FileSystemEnumerableIterator`1..ctor(String path, String originalUserPath, String searchPattern, SearchOption searchOption, SearchResultHandler`1 resultHandler, Boolean checkHost)
at System.IO.Directory.GetFiles(String path)
at Vendor.Application.Product.Setup.Actions.CustomActionData.ConfigurationFilesCustomActionData.CreateSessionCustomActionData(Session session) in C:\work\\Projects\Installation\Packages\Product.Workstation\Setup.Actions\CustomActionData\ConfigurationFilesCustomActionData.cs:line 99
Когда я присоединяю отладчик, я вижу в коде и в файловой системе, что файлы отсутствуют.
Если я изменю первый Ca (PrepareConfigurationFilesCustomAction) на Execute = "deferred", файлы будут записаны, но я не могу получить доступ к значениям сеанса ...
Any Идеи или решения для меня?
Спасибо!