Где должна быть установлена система.Дополнительный конвейер?

StackOverflow https://stackoverflow.com/questions/801579

  •  03-07-2019
  •  | 
  •  

Вопрос

У меня есть простое старое приложение 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.Таким образом, каждый пользователь может вести свой собственный список модулей.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top