InnoSetup - ошибочное сообщение "Файл используется другим процессом..." во время компиляции

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

У меня есть очень простая (подписанная) установка, которая просто копирует некоторые файлы и создает ярлык. Он даже не включает исполняемый файл. Когда я пытаюсь скомпилировать установку, я получаю сообщение "процесс не может получить доступ к файлу, потому что он используется другим процессом" - неоднократно (обычно я всегда получаю настройку для компиляции в течение 3 попыток), но теперь это кажется бесполезным после многих. много попыток. Файл, который используется, не понятен из вывода InnoSetup или диалогового окна ошибки. Определенно нет конкурирующих процессов. (Я перезагрузил машину и все еще получаю это сообщение).

Любые идеи о том, как решить эту проблему, очень ценятся.

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

#define MyAppName "Easy-IAP for IronKey"
#define MyAppVersion "4.0"
#define MyAppPublisher "Command Post Solutions"
#define MyAppURL "http://www.commandpostsolutions.com/"

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{51668D56-27F6-4C83-87F2-677328EFE808}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName="\EZ-IAP"
DefaultGroupName={#MyAppName}
DisableProgramGroupPage=yes
OutputBaseFilename=IronKeySetup
SetupIconFile=C:\Users\ron\Dropbox\EZIAP\eziap.ico
Compression=lzma
SolidCompression=yes
SignedUninstaller=yes
SignTool=Standard /d $qEasy-IAP Installer$q $f                                                                   

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

[Files]
Source: "C:\Users\ron\Dropbox\Easy-IAP for IronKey\AccessDatabaseEngine.exe"; DestDir: "{app}"; Flags: onlyifdoesntexist
Source: "C:\Users\ron\Dropbox\Easy-IAP for IronKey\dotNetFx40_Full_x86_x64.exe"; DestDir: "{app}"; Flags: onlyifdoesntexist
Source: "C:\Users\ron\Dropbox\Easy-IAP for IronKey\Easy-IAP for IronKey\bin\Release\Easy-IAP for IronKey.exe"; DestDir: "{app}";
; NOTE: Don't use "Flags: ignoreversion" on any shared system les
[ICONS]
Name: "{drive:{app}}\Easy-IAP"; Filename: "{app}\Easy-IAP for IronKey.exe"; 

10 ответов

Решение

Это не ошибка, это только плохой дизайн приложения (или плохая документация):)

Использовать OutputDir директива в вашем [Setup] раздел, чтобы избежать этого неправильного поведения.

OutputDir=c:\output

OutputDir указывает каталог "output" для скрипта, в который компилятор установки помещает полученную SETUP.* файлы. По умолчанию создается каталог с именем Output в каталоге, содержащем скрипт для этого.

Вы спрашиваете, почему?

Если вы не используете OutputDir в вашем файле сценария (и многие его не используют) Inno Setup пытается создать итоговую настройку в папке "userdocs:", что вызывает много проблем во всех системах Windows.

Всегда используйте этот параметр, даже если вы хотите получить итоговую настройку в текущей папке, в этом случае используйте:

OutputDir=output

У меня такая же проблема. Это произошло из-за того, что антивирус McAfee запустил сканирование в реальном времени по скомпилированному exe-файлу... Поскольку кажется невозможным исключить каталог из сканирования в реальном времени, я отключил его в McAfee SecurityCenter, и теперь это хорошо. Надеюсь это поможет

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

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

По этой причине вам лучше всего запускать свой установочный файл inno из командной строки или части Visual Studio или другого автоматизированного процесса сборки.

Win 7 Pro/64, InnoSetup 5.5.5(a): у меня были точно такие же проблемы компиляции InnoSetup. После изменения свойств папок, используемых в проектах и ​​выводах путем отмены общего доступа, все работает нормально. Вывод - лучше не использовать InnoSetup в общих папках.

У меня есть OutputDir = x:], но ошибка по-прежнему возникает. Если я перезагружаю свою машину, а затем собираюсь как первая задача, тогда сборка работает.

Я пробовал разные папки на своей рабочей машине, и ничего не помогло. Наконец-то я добился успеха, используя:

OutputDir=C:\Users\userid\Downloads 

(Замените "идентификатор пользователя" своей учетной записью)

Ошибка может быть вызвана тем, что вы пытаетесь скопировать папку, связанную со службой Windows.

Чтобы решить эту проблему, используйте [Code] раздел вместо помещения папки в [Files]. Это позволяет вам проверить, существует ли папка, закрыть соответствующую службу Windows и, наконец, скопировать папку.

У меня было это когда OutputDir="." (имеется ввиду, поместите вывод в тот же каталог, что и исходные файлы). Это потерпит неудачу каждую вторую сборку.

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

У меня была та же проблема с тем, что решение уже указано выше, и другая причина с этой ошибкой возникает, когда выходной файл скомпилированного EXE-файла уже имеет такое же имя в каталоге, куда вы положили выходной каталог из inno setup, Другими словами, при компиляции вам нужны специальные символы, такие как '-' или '_' при создании имени файла, чтобы избежать появления этого сообщения об ошибке.

Я испробовал все советы сверху. Я не мог этого сделать. Затем я переключился с версии 6.2 на 6.0.2, и проблема устранилась.

Другие вопросы по тегам