Где должна быть установлена система.Дополнительный конвейер?
Вопрос
У меня есть простое старое приложение Windows Forms с установщиком WiX, и оно устанавливается для всех пользователей на Program Files
папка, как и следовало ожидать.В приложении размещаются надстройки, использующие Система.Дополнительный фреймворк.
Потому что System.Надстройке framework необходимо выполнить запись в некоторые папки конвейера надстроек (AddIns
, AddInSideAdapters
, AddInViews
, Contracts
и HostSideAdapters
) Я не знаю лучшего места для установки надстроек.Я не могу установить на Program Files
потому что у пользователя не будет разрешения на запись, и если я установлю его на Application Data
после этого надстройки не будут установлены ни для каких других пользователей.
Я понимаю, что здесь существуют противоречивые требования (пользователи не могут связываться с надстройками других пользователей, надстройки должны быть установлены для всех пользователей, и всем пользователям требуется разрешение на запись), но каков наилучший практический путь?
Жаль, что файлы, которые необходимо записать System.AddIn framework, не могут храниться отдельно в Application Data
, но это, по-видимому, является ограничением фреймворка.
Решение
Я знаю, что этот вопрос был задан давным-давно, но...
Вы пробовали 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);
Другие советы
Все еще надеюсь на лучший ответ, но я думаю, что единственный способ сделать это - установить конвейер в Program Files и копировать данные приложения при каждом запуске приложения.Затем вы должны указать System.Добавьте фреймворк в конвейер копирования данных приложения, чтобы он только пытался выполнить запись в профиль пользователя.
Э-э-э, у вас не может быть одновременно "всех пользователей" и "без прав доступа".Я точно не знаю, что такое System.AddIn framework, но если он предназначен для запуска из пользовательского процесса (он же:не системный сервис, подобный process), то он должен быть записан в профиле пользователя (ApplicationDataFolder - отличное место).Это очень фундаментальное правило, которому должны следовать все приложения.Основываясь на моем ограниченном понимании из ваших комментариев, это звучит как Система.AddIn framework нарушает это правило.
Но, наверное, я просто чего-то не понимаю.
Обязательно ли вам использовать программу установки WiX?При развертывании вашего приложения как решения clickonce весь конвейер будет помещен в папку данных приложения users.Таким образом, каждый пользователь может вести свой собственный список модулей.
Это также позволит обойти ограничение на доступ к папке для записи.