2016-06-15 4 views
0

WiX.WiX: данные в% AppData% должны появляться во времени

Я пишу установщик для плагина AutoCAD. Это создает меню в меню Пуск -> Все программы -> и т.д.:

enter image description here

Кроме того, мой инсталлятор создает набор %AppData% вложенных папок и копий в них некоторый набор настраиваемых файлов и DLL. Эти файлы будут использоваться моим плагином, когда он будет загружен в AutoCAD. То есть Эти файлы должны существовать, когда мой плагин загружается в AutoCAD.

enter image description here

Теперь я переключаюсь на другой профиль пользователя Windows. Я вижу свое меню, но я не вижу своих данных в %AppData%. Если я открою свою документацию или файл лицензии через один из моих ярлыковМеню программы, то мои данные появляются в папке %AppData% сразу. Хорошо. Обратите внимание, что это произойдет, только если я использую ярлык вместо целевых файлов напрямую.

Хорошо, но возможно, что пользователь загрузит мой плагин, не открыв мою документацию или файл лицензии, прежде чем ... В этом случае данные, которые необходимы для моего плагина, будут отсутствовать ... У меня было надежда, что когда AutoCAD загрузит мой плагин, тогда его данные появятся в %AppData%, как это происходило, когда я использовал Меню программы. Но я ошибся, и мои данные не появились в %AppData% в этом случае.

Итак, мне нужны либо мои данные будут отображаться в %AppData% при входе пользователя в Windows, либо непосредственно перед тем, как AutoCAD загрузит мой плагин.

Возможно, это возможно в моем коде плагина через C#, чтобы заставить ОС Windows установить компоненты, которые еще не установлены в %AppData%?

UPD

Каждый пользователь должен иметь отдельный набор файлов в его %AppData% каталоге, поскольку эти файлы пользовательские настройки пользовательского интерфейса моего плагина. У каждого пользователя есть индивидуальная потребность.

Как его решить?

+0

% APPDATA% - это папка для каждого пользователя. Если вы хотите использовать папку для каждой машины, вы можете использовать% ALLUSERS% –

+0

Я читал об этом свойстве, но я не уверен, что правильно понимаю, как это работает. Мне нужно, чтобы каждый пользователь имел свой собственный набор файлов в своем каталоге '% AppData% '. Но '% AllUsers%' предоставляет общие файлы напрямую для всех пользователей, а не у каждого пользователя есть личные файлы. Я прав? –

+0

Вы правы. Возможно, вы должны изменить свое приложение, чтобы не требовалось устанавливать файлы для каждого пользователя. –

ответ

2

Поместите файлы в CommonFilesFolder. Это общие двоичные файлы для использования всеми пользователями в системе, и похоже, что в этих файлах нет ничего конкретного. Почему они находятся в папке appdata пользователя, потому что они не похожи на данные приложения. Существуют ли какие-либо данные для пользователя?

Что вы видите, это поведение установщика Windows - использование ярлыков проверяет, что компоненты установлены, и эти файлы отсутствуют для этого пользователя, поэтому он будет их устанавливать (для чего ему понадобится исходный файл MSI) , Этот механизм работает с ярлыками, COM-компонентами, зарегистрированными в таблице Class MSI, и ProgIds, ни один из которых не вызывается при загрузке вашего плагина.

Чтобы заставить этот механизм вызываться, когда стандартные терминалы установщика Windows не используются, вызовите API MsiProvideComponent() Win32 (или эквивалентный), как только загрузится ваш плагин, и до того, как он потребует доступа к конкретным данным пользователя файлов для каждого отсутствующего компонента. Если вы поместите общие Dll в какую-либо общую папку с файлами (вместо папок пользователя), вы сделаете два вызова, по одному для каждого файла данных (по одному файлу на каждый компонент), где каждый файл является KeyPath для его содержащего компонента.

https://msdn.microsoft.com/en-us/library/windows/desktop/aa370356(v=vs.85).aspx

Это требует ProductCode, ComponentCode и (внутреннее) имя функции этих файлов. С параметром режима по умолчанию, как говорят документы, «Предоставьте компонент и выполните любую установку, необходимую для обеспечения компонента». что и используется с помощью ярлыка.

+0

Конкретные (для каждого пользователя) файлы будут сгенерированы AutoCAD в этой папке. Поэтому каждый пользователь должен иметь копию этих файлов. Сгенерированные файлы будут содержать пользовательские настройки при компоновке меню и панелей инструментов. Мой плагин управления DLL написан на C#. Какой COM-компонент я должен создать в коде моего плагина для установки отсутствующих данных в каталоге '% AppData% '? –

+0

'CommonFilesFolder' -' C: \ Program Files (x86) \ Common Files \ 'для x86. Это не то, что мне нужно. –

+0

Когда вы говорите «что мне нужно», есть ли фактическое техническое требование для этого или проблема, которую нужно решить? Я не знаю, как ответить на такой комментарий, извините. – PhilDW