InnoSetup - 编译时错误的“另一个进程正在使用的文件......”消息

时间:2013-03-13 22:06:12

标签: inno-setup file-in-use

虽然我真的很喜欢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 个答案:

答案 0 :(得分:28)

我遇到了同样的问题。 这是由于McAfee防病毒软件在正在编译的exe文件上运行实时扫描... 由于似乎无法从实时扫描中排除目录,因此我在McAfee SecurityCenter中将其关闭,现在它很好。 希望这个帮助

答案 1 :(得分:7)

问题通常是打开浏览器窗口,查看输出文件所在的文件夹。

Explorer会在构建可执行文件时不断打开它,以尝试获取其图标和其他元数据。关闭正在查看输出文件夹的所有打开的资源管理器窗口,然后重试。

因此,您最好从命令行或可视工作室或其他自动构建过程的一部分运行您的inno安装文件。

答案 2 :(得分:4)

这不是一个错误,这只是糟糕的应用程序设计(或错误的文档):)

使用OutputDir部分中的[Setup]指令来避免此错误行为。

OutputDir=c:\output

OutputDir指定脚本的“输出”目录,安装程序编译器将放置生成的SETUP.*文件。默认情况下,它会在包含此脚本的目录下创建名为Output的目录。

你问为什么?

如果你的脚本文件中没有使用OutputDir(许多人不使用它),Inno安装程序会尝试在“userdocs:”文件夹中创建结果设置,这会导致所有Windows系统出现很多问题

始终使用此参数,即使您希望在当前文件夹中进行结果设置,在这种情况下使用:

OutputDir=output

答案 3 :(得分:1)

我有OutputDir = x:]设置,但错误仍然存​​在。如果我重启我的机器然后构建为第一个任务,那么构建工作。

答案 4 :(得分:1)

Win 7 Pro / 64,InnoSetup 5.5.5(a):我有同样的InnoSetup令人难以置信的问题。通过撤销共享来更改项目和输出中使用的文件夹属性后,一切正常。结论 - 最好不要在共享文件夹中使用InnoSetup。

答案 5 :(得分:0)

当OutputDir =“。”时,我有这个。 (意思是,将输出放在与源文件相同的目录中)。它会在每一秒构建时失败。

我通过添加修改我的powershell构建脚本来删除整个输出目录,然后构建我的应用程序(自动创建该目录),然后运行iscc来创建setup.exe

答案 6 :(得分:0)

可能是因为您尝试复制与Windows服务链接的文件夹而导致错误。

要解决此问题,请使用[Code]部分,而不是将文件夹放在[文件]中。这允许您检查文件夹是否存在,关闭关联的Windows服务,最后复制文件夹。

答案 7 :(得分:0)

我遇到了同样的问题,解决方案已在上面说明 当您编译的.exe的输出文件在您从inno setup中放置输出目录的目录中已经具有相同的名称时,会出现此错误的另一个原因。 在编译时,你需要一些特殊的字符,如' - '或者' _'在创建文件名并避免此错误消息。

答案 8 :(得分:0)

我在工作机上尝试了各种文件夹,但没有任何解决方法。我终于通过使用成功了:

OutputDir=C:\Users\userid\Downloads 

(用您的特定帐户替换“用户ID”)

答案 9 :(得分:0)

我尝试了上面的所有建议。我做不到。 然后我从 6.2 版本切换回 6.0.2 并解决了问题。