Установка Inno Setup-доступ запрещен
Я создал инсталляцию с помощью программы установки inno. Мое приложение (среди прочего) после запуска создает pdf-файл в подпапке, а затем открывает его. Но windows 7 говорит, что доступ запрещен,и появляется исключение. - Что случилось? Как предоставить доступ к вложенным папкам с помощью innosetup? Вот фрагмент кода внутри ino:
Source: "C:UsersSomeoneDesktopNETAnimations*"; DestDir: "{app}Animations"; Flags: ignoreversion recursesubdirs createallsubdirs
1 ответ:
Предположительно потому, что вы пытаетесь скопировать файл из личной папки другого пользователя. Это запрещено. Вы можете поместить файлы только в папку текущего пользователя (того, кто запускает установку). В любом случае, трудно представить себе вескую причину, по которой вы хотели бы поступить иначе.
Попробуйте использовать
{userdocs}
вместо этого-константа. ИспользуйтеExpandConstant
, чтобы развернуть его до полного пути.Если вам нужно, чтобы вещи шли в место, которое будет доступно для всех пользователи, Вы должны запустить установщик с правами администратора. Затем вы сможете читать / писать из каталога профилей
All Users
.
EDIT: ах, извините. Я полностью пропустил ту часть вашего вопроса, где вы сказали, что пытаетесь сделать это после установки. Я просто посмотрел на код и подумал, что это то, что вы должны были сделать Inno Setup во время процесса установки.
Это совершенно другой ответ для чего-то после установка завершена. Windows 7 (благодаря UAC ) не позволяет вашему приложению (или любому приложению, если на то пошло) писать в системные папки. Это включает в себя Каталог
Windows
, а также папкуProgram Files
и любую из папок, которые она содержит. Это мера безопасности, предназначенная для того, чтобы предотвратить запуск приложений в местах, где им не место.У вас есть несколько различных вариантов:
Если вам абсолютно необходим доступ на запись к Папка
Program Files
, Вы можете предложить пользователю повысить уровень процесса вашего приложения. В основном это означает, что вы будете запрашивать права администратора, и они увидят окно от UAC, запрашивающее пароль.Я даю дополнительную информацию о том, как вы можете сделать это из приложения C# в мой ответ на этот вопрос. Вы выполните аналогичные действия для приложения, написанного на любом другом языке; вы просто вызываете функции, встроенные в Windows ПРИКЛАДНОЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС.
лучший вариант , однако, состоит в том, чтобы изменить ваше приложение так, чтобы ононе должно было писать в системные папки. Таким образом, вам не придется работать с правами администратора. Эта модель предназначена для всех стандартных приложений Windows. Microsoft рекомендует его, по крайней мере, с первых дней Windows 2000, но на самом деле вы не были вынуждены следовать ему до Vista.
Я больше говорю о различных местах, которые есть у приложения доступ к записи (и различные варианты использования каждого) в мой ответ на этот вопрос.