C # - Windows 7 - Создать файл в - PullRequest
2 голосов
/ 16 мая 2011

По сути, у меня есть приложение, которое установлено на компьютерах пользователей.

Пользователи работают на Windows 7. Пользователям НЕ предоставляется доступ администратора.Однако приложение должно иметь возможность сохранять файлы в своем собственном каталоге Program Files.

Я хотел выбрать следующий путь:

  1. Загрузка различных двоичных файлов (веб-служба).
  2. Запись двоичных файлов во временную папку.
  3. Запустите консольное приложение.(Консольное приложение ожидает завершения работы основного приложения)
  4. Консольное приложение копирует временные файлы в каталог Program Files.
  5. Консольное приложение перезапускает главное приложение.
  6. Консольное приложениевыключается.

Проблема в том, что я знаю, что Windows 7 не позволяет приложениям, которые не запускаются от имени администратора, записывать в каталог Program Files, и я понимаю, почему (для безопасности), но так как яя пишу это приложение самостоятельно, устанавливая его на своих компьютерах, есть ли способ заставить мое приложение записывать в любой каталог, в котором оно находится (независимо от платформы, поскольку оно использует относительные пути), без всплывающего окна с просьбой запустить приложениекак админ?Разве приложение не может быть подписано, чтобы ВСЕГДА работать от имени администратора?

На самом деле, мне даже не нужно, чтобы основное приложение было тем, которое работает с административным доступом.Мне нужно консольное приложение (которое копирует временные файлы), чтобы иметь возможность копировать эти временные файлы как постоянные файлы.


Обновление: Да, это приложение для автообновления.Я думал о ClickOnce и тому подобном, но есть дополнительные требования, которые побуждают меня создавать собственное внутреннее обновление, главным образом потому, что обновления должны быть тихими и по частям.Иногда (в зависимости от обновленных частей) приложение должно завершить работу, переместить файлы внутрь, перезапустить.В других случаях приложению просто нужно переместить файлы и продолжить работу.

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

Ответы [ 3 ]

1 голос
/ 16 мая 2011

Как уже отмечалось в комментариях: ProgramFiles недоступен, если у вас установлена ​​несколько более поздняя версия Windows (Vista +), UAC с поддержкой (по умолчанию) и пользователи без прав администратора.

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

Я предлагаю следующее: не пишите в ProgramFiles

. Либо полностью установите приложение в профиле пользователя, либо разбейте его на части.

Я бы попытался создать исполняемый файл, который очень мало:

  • Устанавливает затенение , чтобы сборки не были заблокированы

  • Найдите сборку в доступном для записи месте (ProgramData или в профиле пользователя) и загрузите ее

  • Запустите приложение оттуда

В случае обновления вы можете перезаписать свои сборки (поскольку они затенены и сохранены в разумном месте) и, при необходимости, остановить программу / попросить пользователя перезапустить / внедрить механизм перезапуска.Для этого вам не нужны административные привилегии.

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

Чтобы понять, как работает UAC, сначала попробуйте использовать термин ПРОЦЕСС вместо приложения и прочитайте это:

  • ПРАВА НА ПРОЦЕСС определяются до начала процесса
  • Каждый процесс, порожденный другим, наследует свою безопасность или:
    • просит высоту

Из этого вы можете вывести этот шаг 3:

3. Launch a console app. (Console App waits for the main app to shutdown)

Унаследует права первого запущенного процесса (вашего приложения).

В какой-то момент вам нужно будет попросить высоту. Если это происходит до запуска вашего приложения или до запуска asubprocess, ваш выбор.

Самый удобный способ сделать это - изменить права доступа к папке один раз при первом запуске или установке. Это способ не беспокоить пользователя каждый раз. Но какой-то UAC наверняка появится в какой-то момент.

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

Одним из решений будет изменение разрешения установленной папки во время установки.

echo y |cacls / E / T / P Пользователи: F

...