Установка Inno Setup-доступ запрещен


Я создал инсталляцию с помощью программы установки inno. Мое приложение (среди прочего) после запуска создает pdf-файл в подпапке, а затем открывает его. Но windows 7 говорит, что доступ запрещен,и появляется исключение. - Что случилось? Как предоставить доступ к вложенным папкам с помощью innosetup? Вот фрагмент кода внутри ino:

Source: "C:UsersSomeoneDesktopNETAnimations*"; DestDir: "{app}Animations"; Flags: ignoreversion recursesubdirs createallsubdirs
1 2

1 ответ:

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

Попробуйте использовать {userdocs} вместо этого-константа. Используйте ExpandConstant, чтобы развернуть его до полного пути.

Если вам нужно, чтобы вещи шли в место, которое будет доступно для всех пользователи, Вы должны запустить установщик с правами администратора. Затем вы сможете читать / писать из каталога профилей All Users.


EDIT: ах, извините. Я полностью пропустил ту часть вашего вопроса, где вы сказали, что пытаетесь сделать это после установки. Я просто посмотрел на код и подумал, что это то, что вы должны были сделать Inno Setup во время процесса установки.

Это совершенно другой ответ для чего-то после установка завершена. Windows 7 (благодаря UAC ) не позволяет вашему приложению (или любому приложению, если на то пошло) писать в системные папки. Это включает в себя Каталог Windows, а также папку Program Files и любую из папок, которые она содержит. Это мера безопасности, предназначенная для того, чтобы предотвратить запуск приложений в местах, где им не место.

У вас есть несколько различных вариантов:

  1. Если вам абсолютно необходим доступ на запись к Папка Program Files, Вы можете предложить пользователю повысить уровень процесса вашего приложения. В основном это означает, что вы будете запрашивать права администратора, и они увидят окно от UAC, запрашивающее пароль.

    Я даю дополнительную информацию о том, как вы можете сделать это из приложения C# в мой ответ на этот вопрос. Вы выполните аналогичные действия для приложения, написанного на любом другом языке; вы просто вызываете функции, встроенные в Windows ПРИКЛАДНОЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС.

  2. лучший вариант , однако, состоит в том, чтобы изменить ваше приложение так, чтобы ононе должно было писать в системные папки. Таким образом, вам не придется работать с правами администратора. Эта модель предназначена для всех стандартных приложений Windows. Microsoft рекомендует его, по крайней мере, с первых дней Windows 2000, но на самом деле вы не были вынуждены следовать ему до Vista.

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