Где должен быть установлен конвейер System.AddIn?

У меня есть простое старое приложение Windows Forms с установщиком WiX, и оно установлено для всех пользователей в папку Program Files, как и следовало ожидать. Приложение размещает надстройки с помощью System.AddIn framework.

Поскольку платформе System.AddIn требуется запись в некоторые папки конвейера надстроек (AddIns, AddInSideAdapters, AddInViews, Contracts и HostSideAdapters), я не знаю, в какое место лучше всего устанавливать надстройки. Я не могу установить в Program Files, потому что у пользователя не будет разрешения на запись, и если я установлю в пользовательскую папку Application Data, надстройки не будут установлены для других пользователей.

Я понимаю, что здесь есть противоречивые требования (пользователи не могут связываться с надстройками других пользователей, надстройки должны быть установлены для всех пользователей, и всем пользователям требуется разрешение на запись), но каков наилучший практический путь? ?

Жаль, что файлы, которые должна писать инфраструктура System.AddIn, не могут храниться отдельно в Application Data, но это, похоже, ограничение фреймворка.


person GraemeF    schedule 29.04.2009    source источник


Ответы (4)


Я знаю, что этот вопрос уже давно задавали, но...

Вы пробовали Environment.SpecialFolder.CommonApplicationData?

В Vista/Windows 7 эта папка: %ProgramData%. Я не уверен на 100%, что это такое в Windows XP, но, вероятно, это %ALLUSERSPROFILE%.

В любом случае, эта папка должна иметь разрешение на чтение/запись и быть одинаковой для всех пользователей.

Не забудьте создать подпапку для названия вашей компании/приложения:

string companyName = "My Company";
string folderPath = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
string path = Path.Combine(folderPath, companyName);
person Doug    schedule 16.03.2011

Все еще надеюсь на лучший ответ, но я думаю, что единственный способ сделать это - установить конвейер в Program Files и копировать в Application Data каждый раз, когда приложение запускается. Затем вы должны указать платформу System.AddIn на копию конвейера в данных приложения, чтобы она только пыталась записать в профиль пользователя.

person GraemeF    schedule 01.05.2009
comment
Я думаю, что ваш подход правильный. Скопируйте надстройки по умолчанию в данные приложения пользователя, если нет существующих надстроек. - person VVS; 26.05.2009

Ухх, у вас не может быть одновременно «все пользователи» и «без прав». Я точно не знаю, что такое инфраструктура System.AddIn, но если она предназначена для запуска из пользовательского процесса (ака: не системная служба, такая как процесс), то она должна писать под профилем пользователя (ApplicationDataFolder - отличное место) . Это очень фундаментальное правило, которому должны следовать все приложения. Основываясь на моем ограниченном понимании ваших комментариев, похоже, что инфраструктура System.AddIn нарушает это правило.

Но я, наверное, просто что-то упускаю.

person Rob Mensching    schedule 30.04.2009
comment
Я думаю, что мы упускаем одно и то же, отсюда и мой вопрос. :) - person GraemeF; 01.05.2009

Обязательно ли использовать установщик WiX? Развертывание вашего приложения в качестве решения clickonce поместит весь конвейер в папку данных приложения пользователя. Таким образом, каждый пользователь может вести свой собственный список модулей.

Это также позволит обойти ограничение доступной для записи папки.

person AdamSane    schedule 24.08.2010
comment
То же самое касается установщика Windows, если его устанавливает каждый пользователь, но это не то, что я ищу. - person GraemeF; 25.08.2010