2009-04-29 2 views
4

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

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

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

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

ответ

2

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

Вы пробовали 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); 
0

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

Но я, вероятно, просто что-то упустил.

+0

Я думаю, что мы пропускаем то же самое, поэтому мой вопрос. :) – GraemeF

1

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

+0

Я думаю, что ваш подход прав. Скопируйте «Addins» по умолчанию в данные приложения пользователя, если нет существующих AddIns. – VVS

0

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

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

+0

То же самое касается установщика Windows, если каждый пользователь устанавливает его, но это не то, что я ищу. – GraemeF

Смежные вопросы