由inno setup创建的vb脚本的快捷方式出错

时间:2014-08-03 18:30:39

标签: windows inno-setup shortcut

编辑:我做了很少的编辑问题,最后描述了问题的原因。

我使用Inno构建了一个设置。执行开始的主文件是vbs文件。我已将Inno设置为使用自定义图标在桌面上创建快捷方式。但安装后,快捷方式会导致文件丢失的vbs错误。如果我转到主vbs文件并直接运行或在桌面上手动创建该vbs文件的另一个快捷方式,我可以多次运行该快捷方式。那么问题出在哪里。是Inno的问题还是一些脚本问题。

这是vbs脚本(其目的是启动批处理文件,但在打开批处理命令时不显示cmd窗口)

Set WshShell = CreateObject("WScript.Shell") 
WshShell.Run chr(34) & "run.bat" & Chr(34), 0
Set WshShell = Nothing

我不知道vbs,这个脚本在互联网上。因此,如果脚本有一些明显的问题,请帮我纠正。

我得到的确切错误是:

Script: C:\Admin\start.vbs
Line:   2
Char:   1
Error:  The system cannot find the file specified.
Code:   80070002
Source: (null)

这是我在Inno中使用的脚本

  ; Script generated by the Inno Setup Script Wizard.
  ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

  [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.)
  AppName=Test
  AppVersion=1.0
  AppVerName=Test 1.0
  AppPublisher=USV
  DefaultDirName=C:\Test
  DisableDirPage=yes
  DefaultGroupName=Test
  DisableProgramGroupPage=yes
  OutputDir=C:\Users\Ashu\Desktop
  OutputBaseFilename=Test
  SetupIconFile=C:\Test\logo2.ico
  Compression=lzma
  SolidCompression=yes
  ; "ArchitecturesAllowed=x64" specifies that Setup cannot run on
  ; anything but x64.
  ArchitecturesAllowed=x64
  ; "ArchitecturesInstallIn64BitMode=x64" requests that the install be
  ; done in "64-bit mode" on x64, meaning it should use the native
  ; 64-bit Program Files directory and the 64-bit view of the registry.
  ArchitecturesInstallIn64BitMode=x64

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

  [Tasks]
  Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

  [Files]
  Source: "C:\Test\start.vbs"; DestDir: "{app}"; Flags: ignoreversion
  Source: "C:\Test\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
  ; NOTE: Don't use "Flags: ignoreversion" on any shared system files

  [Icons]
  Name: "{group}\Test"; Filename: "{app}\start.vbs"; IconFilename: {app}\logo2.ico;
  Name: "{group}\{cm:UninstallProgram,Test}"; Filename: "{uninstallexe}"; IconFilename: {app}\logo2.ico;
  Name: "{commondesktop}\Test"; Filename: "{app}\start.vbs"; Tasks: desktopicon; IconFilename: {app}\logo2.ico;

  [Run]
  Filename: "{app}\importstarter.bat";
  Filename: "{app}\start.vbs"; Description: "{cm:LaunchProgram,Test}"; Flags: shellexec postinstall skipifsilent

编辑: 我更新了与问题非常相似的脚本。问题的原因是在快捷方式属性中,设置了目标属性但是将属性中的start设置为空白。将其更正为所需目录可以解决问题。程序首次运行,因为安装程序直接从主文件而不是快捷方式运行。所以这一定是Inno Script的一个问题。

3 个答案:

答案 0 :(得分:2)

您的问题是由于缺少特定的工作/电流路径以及使用相对路径造成的。

运行vbs文件时,工作/当前目录将是安装程序的目录,c:\Windows\j:\MyData\等。当它尝试运行run.bat时,它无法在当前目录中找到它,导致“系统无法找到指定的文件”。来自脚本引擎的错误。

解决此问题的最佳方法是将正在运行的脚本的当前目录强制到包含它的文件夹中。 (我不知道如何做到这一点)

或者,您可以在快捷方式和[Run]条目上设置当前目录:

[Icons]
Name: "{group}\Test"; Filename: "{app}\start.vbs"; IconFilename: {app}\logo2.ico; WorkingDir: "{app}";
Name: "{group}\{cm:UninstallProgram,Test}"; Filename: "{uninstallexe}"; IconFilename: {app}\logo2.ico;
Name: "{commondesktop}\Test"; Filename: "{app}\start.vbs"; Tasks: desktopicon; IconFilename: {app}\logo2.ico; WorkingDir: "{app}";

[Run]
Filename: "{app}\importstarter.bat"; WorkingDir: "{app}";
Filename: "{app}\start.vbs"; WorkingDir: "{app}"; Description: "{cm:LaunchProgram,Test}"; Flags: shellexec postinstall skipifsilent

您也可以将它放在批处理文件的顶部,这样它们就不需要特定的当前目录:

cd /d %~dp0

请注意,Inno安装程序的最新版本(since 2010)会强制设置工作目录以防止此错误。

答案 1 :(得分:0)

您需要指定完整路径并丢失最后一条无意义的行。

Set WshShell = CreateObject("WScript.Shell") 
WshShell.Run chr(34) & "c:\somefolder\run.bat" & Chr(34), 0

答案 2 :(得分:0)

感谢大家的关注。问题出在Inno Setup上。我将它更新到更新的版本,问题已经消失,而不对脚本进行任何更改。 问题是因为快捷方式不包含任何起始点文件夹(感谢@Noodles)。因此无法在cmd的默认目录中找到文件。