Установка Inno Setup - доступ запрещен - PullRequest
2 голосов
/ 06 апреля 2011

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

Source: "C:\Users\Someone\Desktop\NET\Animations\*"; DestDir: "{app}\Animations"; Flags: ignoreversion recursesubdirs createallsubdirs

1 Ответ

4 голосов
/ 06 апреля 2011

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

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

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


РЕДАКТИРОВАТЬ: Ах, извините.Я полностью пропустил ту часть вашего вопроса, где вы сказали, что пытаетесь сделать это после установки.Я просто посмотрел на код и подумал, что это было то, что Inno Setup делает во время процесса установки.

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

У вас есть несколько вариантов:

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

    Я приведу дополнительную информацию о том, как вы можете это сделать из приложения на C #.в мой ответ на этот вопрос .Вы выполните аналогичные шаги для приложения, написанного на любом другом языке;вы просто вызываете функции, встроенные в Windows API.

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

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

...