Где должен быть установлен конвейер System.AddIn? - PullRequest
4 голосов
/ 29 апреля 2009

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

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

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

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

Ответы [ 4 ]

2 голосов
/ 17 марта 2011

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

Вы пробовали 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);
1 голос
/ 02 мая 2009

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

0 голосов
/ 24 августа 2010

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

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

0 голосов
/ 30 апреля 2009

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

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

...