Куда я могу поместить файлы, чтобы их могли редактировать не администраторы и чтобы к ним могли обращаться все пользователи? - PullRequest
2 голосов
/ 25 мая 2011

Я разрабатываю приложение для Windows, которое имеет автоматическое обновление, поэтому исполняемый файл должен быть в состоянии перезаписать.

Приложение также загружает некоторые .dll

Исполняемый файл и библиотеки DLL в папке данных приложения, но Visual Studio предупреждает меня о том, что файлы не будут доступны для всех пользователей.

Я попытался поместить исполняемый файл в папку данных приложения и библиотеки DLL в программепапка files, но приложение не работает из-за невозможности загрузки dll.

Как я могу A) удалить предупреждение или B) организовать все лучше?

Ответы [ 4 ]

0 голосов
/ 25 мая 2011

Если вы хотите сделать как Chrome, поместите их под

Environment.GetFolderPath(Environment.SpecialFolder.System)
0 голосов
/ 25 мая 2011

Chrome также имеет функцию обновления без вывода сообщений, и весь исполняемый файл сохраняется в папке «Пользователи». В моем случае в Windows 7 он сохраняется в: C: \ Users \ имя моей учетной записи \ AppData \ Local \ Google

Вы также должны проверить Environment.SpecialFolder перечисление.

0 голосов
/ 25 мая 2011

В системе нет такой папки. Вот некоторые мои идеи:

  • Используйте GAC. Насколько мне известно, если вы объедините свои двоичные файлы в сборку с цифровой подписью, GAC разрешит как автоматическую установку, так и «обновление». (Здесь безопасность присуща тому, что открытый ключ является частью идентификатора сборки, поэтому не имеет значения, что заканчивается в GAC, пока он подписан, сборка «вредоносного ПО» не может выдать себя за подписанную сборку)

  • Использование установщика на основе MSI: Опять же, после начальной административной установки установщик MSI разрешит автоматическую установку исправлений для существующего контента с цифровой подписью. Здесь безопасность присуща администратору, который сначала дает разрешение на установку. Можно подтвердить, что подписанные MSI-патчи принадлежат одному издателю, поэтому MSI не нужно повторно запрашивать разрешение).

  • Установите первичные двоичные файлы в общую папку с правами UAC. Сохраните двоичные файлы исправлений в папке для каждого пользователя. Это позволяет пользователям без прав администратора перезаписывать файлы друг друга. Потенциально существует некоторая избыточность, но что с того.

  • И наконец (и в последнюю очередь), создайте свою собственную папку, в значительной степени, где вы хотите. Во время создания программное обеспечение является владельцем новой папки с точки зрения безопасности Windows, и, как владелец, у вас есть неявное разрешение на настройку ACL новой папки. Таким образом, начальный процесс установки, выполняемый от имени пользователя или администратор, может (для папок, которые он может успешно создать) настроить ACL для папки, чтобы предоставить группе «Пользователи» доступ к наследуемому R / W-доступу. Все файлы, впоследствии созданные в папке любым пользователем, будут доступны для чтения и записи всем пользователям (кроме гостя (и вы действительно не хотите предоставлять гостевым пользователям доступ для записи ко всему).

Этот последний параметр является проблемой безопасности, поскольку обычные пользователи не должны иметь возможности влиять на среду выполнения других пользователей. «Доступ пользователей к R / W» означает, что обычные пользователи могут устанавливать трояны или иным образом вмешиваться в данные других пользователей в системе, что, по сути, делает всех пользователей специальными администраторами.

  • Во время первоначальной установки более безопасным является установка агента обновления в качестве службы. Программное обеспечение без повышенных прав, работающее на каждой учетной записи пользователя, будет затем использовать своего рода IPC для подключения к службе, которая, будучи системной, будет иметь разрешение на обновление файлов в местах, к которым учетная запись пользователя не имеет доступа.

Это довольно сложное решение, которое по сути заново изобретает колесо - установщик MSI использует компонент сервисного агента для выполнения обновлений без запросов UAC.

0 голосов
/ 25 мая 2011

Исполняемый файл и Dlls всегда должны идти в программных файлах. Программа обновления должна обрабатывать повышение привилегий через UAC.

...