Мое приложение выдает ошибки «Доступ запрещен» при записи временных файлов в каталоге установки, где находится исполняемый файл. Однако он отлично работает в Windows XP. Как предоставить права доступа к папке Program Files в Windows 7?
EDIT: Как заставить программу попросить пользователя повысить права? (т.е. запустить программу с полными правами администратора)
ОТВЕТЫ
Ответ 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 и сохранить его.
Теперь откройте этот файл и найдите . Он должен быть установлен на asInvoker .
Измените его на highestAvailable . Теперь при выполнении вашего приложения появится запрос с просьбой о разрешении. Нажмите yes !
Thats all:) теперь вы можете писать и читать из system32 или любого другого файла, который требует права администратора
Вы можете проверить свое приложение sigcheck.
sigcheck.exe -m yourapp.exe
И в выходной проверке для элемента requestExecutionLevel.
Ответ 5
Вы не можете заставить приложение .Net повышать свои права. Это просто не разрешено. Лучшее, что вы можете сделать, это указать повышенные права при запуске другого процесса. В этом случае у вас будет двухэтапный запуск приложения.
Этап 1 не делает ничего, кроме подготовки возвышения с повышенными правами с использованием объекта System.Diagnostics.ProcessStartInfo и вызова Start().
Этап 2 — это приложение, работающее в повышенном состоянии.
Защитник Windows 10 блокирует и удаляет файлы! Решаем проблему
Как уже упоминалось выше, вы очень редко хотите сделать это. И вы, конечно, не хотите делать это просто, чтобы вы могли записывать временные файлы в% programfiles%. Используйте этот метод только тогда, когда вам нужно выполнить административные действия, такие как запуск/остановка службы и т.д. Запишите ваши временные файлы в лучшее место, как указано в других ответах здесь.
Ответ 6
Еще один способ: остановить UAC, а затем перезапустить его. Создайте CMD файл со следующим кодом:
Остановить ОАК % windir%System32reg.exe ADD HKLMSOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystem/v EnableLUA/t REG_DWORD/d 0/f перезагрузка Запуск ShutDown/R/F/T 30
Вам нужно щелкнуть правой кнопкой мыши по файлу CMD и использовать run as admin. как только вы закончите то, что вы делаете, перезапустите UAC с помощью следующего кода (не нужно использовать run as admin на этот раз);
% windir%System32reg.exe ADD HKLMSOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystem/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-папками.
Основным компромиссом является безопасность и простота использования. Если вы знаете, что делаете, вы хотите быть богом на своем собственном компьютере. Если вы должны поддерживать здоровые системы для своего локального анархического общества, вы можете добавить некоторую безопасность.
Источник: utyatnishna.ru
Не могу установить программу в program files
Это снова я — ваша чайниха!
Установила себе наконец-то семёрку профессиональная, счастью не было предела. после стольких лет ХР.
Начала устанавливать нужные программы, всё было чудно, всё поставилось хорошо. Но когда я собралась установить игру, мне начало выдавать ошибку «Невозможно создать папку в . Program Files, ошибка 5: отказано в доступе».
Я уже слышала о заморочках с администраторами в 7-ке, поэтому поставила контроль учетных записей на минимум, а так же прописала для своей учетки net user . /active:yes
Но это не помогло! Мало того, когда я попыталась покопаться с доступом к самой папке «Program Files», я попыталась изменить параметры доступа, но и тут получила «Отказано в доступе».
Добрые знающие ребята, помогите разобраться!
Регистрация: 09.11.2011
Сообщений: 2,057
Репутация: 152
Вообще отключите UAC и запускайте от имени администратора.
Игра крякнутая?
Регистрация: 01.09.2011
Сообщений: 28
Репутация: 1
Вообще отключите UAC и запускайте от имени администратора.
Игра крякнутая?
Ну, ползунок в самый низ — совсем выключила. Запуск от имени администратора тоже не помогает.
Игра — клиент онлайн игры — лицуха бесплатная. Другие программы установились вообще без проблем.
Регистрация: 09.11.2011
Сообщений: 2,057
Репутация: 152
Можете поднять полномочия выше админских. Выполните этот твик:
Windows Registry Editor Version 5.00
После этого в контекстром меню при зажатой клавише Shift у вас появится новая опция: «Стать владельцем и задать полный доступ к объекту»
Только не злоупотребляйте этим.
Регистрация: 01.09.2011
Сообщений: 28
Репутация: 1
Можете поднять полномочия выше админских. Выполните этот твик:
Windows Registry Editor Version 5.00
После этого в контекстром меню при зажатой клавише Shift у вас появится новая опция: «Стать владельцем и задать полный доступ к объекту»
Только не злоупотребляйте этим.
Неужели нет другого выхода? Я очень благодарна, но как-то странно, что я не могу установить игру, несмотря на все включенные права. кроме тех, что Вы назвали «выше админских». Я всё-таки в компьютерах не очень разбираюсь.
Источник: pchelpforum.ru
Windows: разрешить обычным (не повышенным) программам записывать в каталог Program Files
Я устал от старых приложений, которые ведут себя странно, потому что они не могут записывать в каталог «Program Files». Я не хочу вручную настраивать их запуск от имени администратора, и меня не особо беспокоит безопасность — в дополнение к доверению запускаемых приложений, я всегда загружаюсь в Windows для запуска игр (так что раздел не ‘ не содержат каких-либо ценных данных), и я в любом случае обычно переустанавливаю Windows каждые пару месяцев. Как я могу превратить Program Files и Program Files (x86) в обычные каталоги (с точки зрения разрешений), в которые каждое приложение может писать, независимо от разрешений? В данный момент у меня работает Windows 10, но в идеале я хотел бы знать, как это сделать на 8/7/Vista, для дальнейшего использования. Изменить: я должен отметить, что я использую корпоративную версию Windows 10, поэтому я могу изменить групповые политики или что-то еще, если это будет необходимо.
изменён Wowfunhappy 219
задан Wowfunhappy 219
2 ответа 2
Благодаря функциям безопасности, реализованным в Windows Vista (UAC), любая программа без прав администратора, которая пытается записывать в защищенные места, такие как «Program Files», будет перехватывать свои записи и перенаправлять их в альтернативное «удобное для пользователя» место. Википедия утверждает (и я выделил соответствующий раздел):
Приложения, написанные с допущением, что пользователь будет работать с правами администратора, испытывали проблемы в более ранних версиях Windows при запуске с ограниченными учетными записями пользователей, часто из-за того, что они пытались выполнить запись в машинные или системные каталоги (такие как Program Files) или ключи реестра. (особенно HKLM). UAC пытается облегчить это с помощью виртуализации файлов и реестра, которая перенаправляет записи (и последующие операции чтения) в расположение пользователя в профиле пользователя. Например, если приложение пытается выполнить запись в «C:program filesappnamesettings.ini», а у пользователя нет прав на запись в этот каталог, запись будет перенаправлена в «C:Usersusername». AppData Local VirtualStore Program Files appnamesettings.ini ”.
Это просто не то, что вы не можете изменить. Это намеренно.
ответ дан Dandy 312
- Зайдите в свойства и выберите вкладку Безопасность.
- Нажмите Дополнительно.
- Измените право собственности на свою учетную запись вместо TrustedInstaller и разрешите ее распространение. Это позволяет вам добавить себя в список принципалов.
- Нажмите «Добавить» и введите свое имя пользователя, нажмите «Проверить имена», и оно будет автоматически исправлено.
Теперь вы можете добавить «Полный контроль» для своего имени пользователя, и все приложения, которые вы запускаете, должны иметь возможность писать в эту папку и ее подпапки.
Это помогло мне заставить Chrome сохранять профили OpenVPN непосредственно в каталог установки.
Источник: poweruser.guru