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, и проблема устранилась.