安装到 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”常量】怎么解决?