Подтвердить что ты не робот

Разрешить разрешение доступа для записи в Program Files of Windows 7

Мое приложение выдает ошибки "Доступ запрещен" при записи временных файлов в каталоге установки, где находится исполняемый файл. Однако он отлично работает в Windows XP. Как предоставить права доступа к папке Program Files в Windows 7?

EDIT: Как заставить программу попросить пользователя повысить права? (т.е. запустить программу с полными правами администратора)

4b9b3361

Ответ 1

Ваша программа не должна записывать временные файлы (или что-то еще в этом случае) в каталог программы. Любая программа должна использовать% TEMP% для временных файлов и% APPDATA% для пользовательских данных приложения. Это было верно после Windows 2000/XP, поэтому вы должны изменить свое приложение.

Проблема не в Windows 7.

Вы можете задать путь к папке appdata:

string dir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);

или для пути TEMP

string dir = Path.GetTempPath()

Ответ 2

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

Однако я бы не предложил сделать это. Было бы лучше использовать что-то вроде этого:

Environment.GetFolderPath(SpecialFolder.ApplicationData);

чтобы получить путь к папке AppData и создать там папку для вашего приложения. Затем установите там временные файлы.

Ответ 3

Параметры, о которых я могу думать:

  • Запустите все приложение как полный администратор. используя UAC
  • Запустите подпроцесс в качестве полного администратора только для тех, кому нужен доступ
  • Запись временных файлов в другое место

Ответ 4

Добавить новый элемент в проект: Application Manifest и сохранить его.

Теперь откройте этот файл и найдите <requestExecutionLevel>. Он должен быть установлен на asInvoker.

Измените его на highestAvailable. Теперь при выполнении вашего приложения появится запрос с просьбой о разрешении. Нажмите yes!

Thats all:) теперь вы можете писать и читать из system32 или любого другого файла, который требует права администратора

Вы можете проверить свое приложение sigcheck.

sigcheck.exe -m yourapp.exe

И в выходной проверке для элемента requestExecutionLevel.

Ответ 5

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

Этап 1 не делает ничего, кроме подготовки возвышения с повышенными правами с использованием объекта System.Diagnostics.ProcessStartInfo и вызова Start().

Этап 2 - это приложение, работающее в повышенном состоянии.

Как уже упоминалось выше, вы очень редко хотите сделать это. И вы, конечно, не хотите делать это просто, чтобы вы могли записывать временные файлы в% programfiles%. Используйте этот метод только тогда, когда вам нужно выполнить административные действия, такие как запуск/остановка службы и т.д. Запишите ваши временные файлы в лучшее место, как указано в других ответах здесь.

Ответ 6

Еще один способ: остановить UAC, а затем перезапустить его. Создайте CMD файл со следующим кодом:

Остановить ОАК % windir%\System32\reg.exe ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System/v EnableLUA/t REG_DWORD/d 0/f перезагрузка Запуск ShutDown/R/F/T 30

Вам нужно щелкнуть правой кнопкой мыши по файлу CMD и использовать run as admin. как только вы закончите то, что вы делаете, перезапустите UAC с помощью следующего кода (не нужно использовать run as admin на этот раз);

% windir%\System32\reg.exe ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System/v EnableLUA/t REG_DWORD/d 1/f

перезагрузка Запуск ShutDown/R/F/T 30

Нижним сторонам использования этого метода нужно щелкнуть правой кнопкой мыши и использовать run as admin для закрытия UAC, и вам нужно перезагрузить его, чтобы он вступил в силу.

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

Ответ 7

Вы можете добавить к пользователю IIS доступ к папкам веб-сайта или веб-приложения, которые вы хотите записать или переписать в нем.

Ответ 8

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

Было бы намного проще хранить все специфичные для приложения данные (например, ini файлы) в той же папке, что и приложение (или в подпапках), чтобы ускорить передачу данных по всему диску (% APPDATA%, реестр и кто знает где еще). Это просто идея Microsoft о чистом программировании. Затем, конечно, вам нужно очиститель реестра, очиститель дисков, временный очиститель файлов,... вместо e + очень чистая практика - удаление папки приложения удаляет все специфичные для приложения данные (данные пользователя exep, которые обычно находятся где-то в "Мои документы" или так).

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

Ответ 9

Я думаю, что есть альтернативное решение всех этих проблем.... Сделайте двухуровневое приложение. Как сказано выше...

1) Launcher, который запустит другое главное приложение, используя такой код, как (VB)

Call ShellExecute(hwnd, "runas", App.Path & "\MainApp.exe", 0, 0, vbNormalFocus)

2) Основное приложение, которое записывает в защищенные области, то есть папку Program Files

Я успешно пробовал это с помощью Windows 7

Я также разрабатываю приложение, которое имеет функцию онлайн-обновления. Но это не работает в Vista/W7..

Я согласен с другими людьми в отношении политик Microsoft и стандартных практик.

Но мой вопрос... 1) Как применить обновление к существующему приложению, которое, вероятно, всегда остается в папке Program Files. 2) Возможно, есть какой-то способ сделать это, в противном случае, как работает программа обновления головоломок, антивирусная программа или любая программа обновления программного обеспечения?

Мне нужно ответить на мои вопросы.....: o

Prof. Раджендра Хоуп (MIT, Пуна, Индия)

Ответ 10

Если у вас есть такая программа, просто установите ее в C:\, а не в Program Files. У меня было много проблем, когда я устанавливал Android SDK. Моя проблема решена путем установки его в C:\.

Ответ 11

Хотя M $ "передовой опыт" - не записывать данные в папку% programfiles%; Я иногда делаю. Я не считаю целесообразным записывать временные файлы в такую папку; переменная окружения TEMP может указывать, например, на хороший, быстрый, RAM-диск.

Однако я не люблю записывать данные в% APPDATA%. Если окна настолько испорчены, что нужно, например, стереть их и полностью переустановить, возможно, на другой диск, вы можете потерять все настройки почти для всех ваших программ. Я знаю. Я делал это много раз. Если он хранится в% programfiles%, 1) он не потеряется, если мне, например, придется переустанавливать Windows на другом диске, поскольку пользователь может просто запустить программу из своего каталога, 2) она сделает ее переносимой, и 3) хранит программы и их файлы данных вместе.

Я получил доступ на запись, установив Inno Setup, установщик, создал пустой файл для моего INI файла и дал ему настройку изменения пользователя в разделе [Files]. Теперь я могу написать это по своему желанию.

Ответ 12

Я искал ответы. Я нашел только один.

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

Я пытаюсь сохранить изображение, найденное в сети прямо в папке windows/web/wallpaper, и это не позволит мне. Вместо этого я должен сохранить его на своем рабочем столе (я ОТКАЗЫВАЮ, чтобы перейти к "моим документам/картинкам и т.д.", Поскольку я отказываюсь использовать такие папки, у меня есть мое собственное дерево каталогов), затем, с рабочего стола, вырезать и вставлять его в папку windows/web/wallpaper. И вы говорите мне, что я должен это сделать и улыбаться? Как пользователь admin, я ДОЛЖЕН быть в состоянии сохранить непосредственно в папку назначения. Мои разрешения в свойствах/безопасности диска и в свойствах/безопасности каталога говорят, что я могу писать, но я не могу. Не программировать файлы, программные файлы (86) и окна.

Как сохранить файл, который я только что изменил для игры в папке Program Files (86) (имя игры). Это не позволит мне. Я открываю файл, чтобы изменить его, я не могу его сохранить без предварительного сохранения его на рабочем столе и т.д., Как описано выше, или открытия программы, которая используется для изменения файла сначала как администратора, что означает, что сначала переходите к другому часть дерева каталогов, где я храню эти программы для пользовательских мод, а затем в программе, выбрав для открытия файла и снова перемещаясь к файлу, который я мог бы просто щелкнуть, чтобы изменить в первую очередь из папки моих проектов, только чтобы обнаружить, что это выиграло Не работай! Он сохраняет файл, но файл не может быть найден. Он есть, но невидим. Единственное решение - сохранить на рабочем столе, как указано выше.

Мне не нужно было делать все это как пользователь admin. Однако, если я использую истинную учетную запись администратора, все работает нормально. Но я не хочу использовать реальную учетную запись администратора. Я хочу использовать учетную запись пользователя с правами администратора. В нем говорится, что у меня есть права администратора, но я этого не делаю.

И, наконец, я отказываюсь хранить свои порталы в% appdata%. Это не то, как я хочу перемещаться по дереву каталогов. Мои личные установки, которые я использую в качестве переносимых, хранятся в каталоге, который я создаю в качестве предпочтения навигации.

Итак, вот проверенный и верный ответ, который я нашел:

Из того, что я видел до сих пор.... если вы не используете настоящую учетную запись администратора, эти разрешения просто недоступны для любого другого пользователя с правами администратора в ОС Windows Vista и Windows 7. Хотя было просто установить права администратора в Windows XP, более поздние версии отняли это у всех, кроме тех, кто может удобно взломать.

Ответ 13

Я работаю над программой, которая правильно сохраняет свои данные в% APPDATA%, но иногда есть общесистемные настройки, которые затрагивают всех пользователей. Поэтому в этих ситуациях он должен записываться в каталог установки программ.

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

Полагаю, я просто напишу файл в% APPDATA% и запустил внешнюю программу, которая копирует файл в папку установки, и программа THAT запрашивает права администратора... немой идеи, но, похоже, это единственное практическое решение...

Ответ 14

Было бы проще создать папку с именем "c:\programs writeable" и поставить приложение ниже этого. Таким образом можно избежать джунглей с низкими c-папками.

Основным компромиссом является безопасность и простота использования. Если вы знаете, что делаете, вы хотите быть богом на своем собственном компьютере. Если вы должны поддерживать здоровые системы для своего локального анархического общества, вы можете добавить некоторую безопасность.