安装到 USB 驱动器根目录时出现 Inno Setup 错误:“您必须输入带有驱动器号的完整路径”

Posted

技术标签:

【中文标题】安装到 USB 驱动器根目录时出现 Inno Setup 错误:“您必须输入带有驱动器号的完整路径”【英文标题】:Inno Setup error when installing to USB drive root: "You must enter a full path with drive letter" 【发布时间】:2014-11-01 07:44:44 【问题描述】:

我想知道如何解决这种错误:

您必须输入带有驱动器号的完整路径;例如:C:\APP 或 UNC 路径,格式为:\server\share

每当我尝试强制 Inno Setup Compiler (5.5.5 u) 将我的东西放入其中时就会出现这种情况,比如说 H:\ 而不是 H:\New Folder

我需要编译器将我的目标位置自定义为H:\

这是我的示例程序;

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName=drive:F:
AppendDefaultDirName=no

[Files]
Source: "File1.txt"; DestDir: "code:GetExeLocation|app\My_Portable_App"; \
  Flags: ignoreversion 
[Code]
var
  UsagePage: TInputOptionWizardPage;

procedure InitializeWizard;
begin
   Create the pages 
  UsagePage := CreateInputOptionPage(wpWelcome,
    'Installation Type', 'Select Installation Option',
    'Where would you like to install this program',
    True, False);
  UsagePage.Add('Normal – PC Hard Disk Installation ');
  UsagePage.Add('Portable – USB Drive Installation');

  Set Default – Normal Install
  UsagePage.SelectedValueIndex := 0;
end;

var
  bIsPortable : Boolean;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
  // If we have clicked the next button on our custom page.
  if (CurPageID = UsagePage.ID) then
  begin
    bIsPortable := not (UsagePage.SelectedValueIndex = 0);
  end;
  result := true; // need to return a value so next key has an impact
end;

function GetExeLocation (Param: String) : String;
begin
  if bIsPortable then
    result := Param
  else
    result := Param;
end;

function InstallType(sRequiredType:String):Boolean;
begin
  if sRequiredType = 'Portable' then
    result := bIsPortable
  else
    result := not bIsPortable;
end;

解释:

当我选择“普通-PC 硬盘安装”作为我的选择时,我所有的安装文件或文件夹都应该转到正常路径,即C:\My Program,但是当我选择“便携式-USB 驱动器安装”作为我的入口,我想将我所有的安装文件或文件夹直接放入USB Pen drive Root,即在这里H:\,其中“H”是我选择放入我的东西的USB Pen Drive字母。但是我的程序不允许我这样做,而是默认添加一个新文件夹以将我的安装文件或文件夹放在那里,即H:\New Folder,我根本不需要它!当我强迫做我想做的事时,它最终给了我一个错误!

我需要你的帮助来解决这个问题,如果这个 inno-setup 不能做我想要的,请给我另一个,我会很感激的!

编辑:

让我们专注于第二个选择“('便携式-USB驱动器安装')”,因为那是我真正的目标。

从源头:我做了一些更改,以使其更清晰。

我添加了我的目标目录,即code:GetExeLocation|app\My_Portable_App。所以我在这里想要的是,我所有的安装文件或文件夹都安装在这个目录中,我的意思是My_Portable_App。我的 U 盘的路径应该是H:\My_Portable_App。所以当一切顺利时,我只想在我的 USB 笔式驱动器中看到这个文件夹 My_Portable_App,它将包含我所有的东西!!!

提前致谢!

【问题讨论】:

那么,H:\ 是一个映射驱动器?如果您选择 H:\..(here!).... 而不是 H:\New Folder ,您会收到该错误是什么意思?能否说的更具体一些(可能举个具体的例子)好吗? 感谢 TLama 的快速回复!我已经发布了一个示例,以便您可以通过,如果仍然不能清楚地回答,请告诉我! 我会等待你的回复,TLama!!! 【参考方案1】:

如果您想直接安装到h:\,那么您应该在位置框中明确输入它。如果您还想在使用浏览对话框后停止附加 My Program,则需要确保将 AppendDefaultDirName 设置为 no。

另请注意,对于 file2,如果 bIsPortable 为 true,则 DestDir 最终将设置为 app/app,这很可能会扩展为无效路径。

您最好的选择是使用code:... 函数基于bIsPortable 创建一个“默认”路径,然后一切都可以从那里安装到​​app

【讨论】:

感谢 Deanna 的精彩回复! 我通过了您的建议并进行了一些更改,我也尝试手动放置我的安装路径,但是当我按下下一步按钮时,仍然出现错误。请看看我所做的小改动,您可能会找到帮助我的方法!【参考方案2】:

我也在验证过程中苦苦挣扎,TInputDirWizardPage 中的 root 无效。 事实证明,有一个简单的 Inno Setup 选项可以改变这种行为:

AllowRootDirectory=yes

将允许用户指定驱动器根目录而不会出错。 另见,

AllowUNCPath=yes/no

AllowNetworkDrive=yes/no

在 Inno 帮助文件中查看适用于选择目标位置页面的其他验证修饰符。

【讨论】:

【参考方案3】:

此安装文件必须位于光盘 c: 上。 就是这样。

【讨论】:

以上是关于安装到 USB 驱动器根目录时出现 Inno Setup 错误:“您必须输入带有驱动器号的完整路径”的主要内容,如果未能解决你的问题,请参考以下文章

用inno setup打包安装工具生成的EXE程序,在安装的时出现【试图在初始化之前展开“app”常量】怎么解决?

用烧写器给单片机烧写程序时出现提示“写入Flash时USB通讯错误,请检查系统hid设备是不是被修改”

用inno setup打包安装工具生成的EXE程序,在安装的时出现【试图在初始化之前展开“app”常量】怎么解决?

静默安装的Inno Setup

打开 oracle 表单时出现问题,您必须安装 J2SE 插件版本

在三星设备上安装应用程序时出现“无法在 USB 存储或 SD 卡上安装”错误