我具有用于最新版本的安装程序的安装文件。它可以从Windows XP到Windows 8进行编译和运行,但是在Windows 10中,当它创建带有下一个错误的桌面图标时,它会失败: IPersistFile ::保存失败;代码0x80070002
这是我在设置文件中创建图标的方式:
[Icons]
Name: "{userdesktop}\Forex Tester 4"; Filename: "{app}\ForexTester4.exe"; Tasks: desktopicon
部分安装日志文件:
2019-02-01 12:50:46.376 -- Icon entry --
2019-02-01 12:50:46.376 Dest filename: C:\Users\Mike\Desktop\Forex Tester 4.lnk
2019-02-01 12:50:46.376 Creating the icon.
2019-02-01 12:50:46.376 Exception message:
2019-02-01 12:50:46.376 Message box (OK):
IPersistFile::Save failed; code 0x80070002.
The system cannot find the file specified.
2019-02-01 12:50:59.066 User chose OK.
此文件夹存在,我可以在那里手动创建文件。但是inno安装程序无法执行此操作...除桌面图标以外的所有其他图标都没有问题。
有什么想法吗?
答案 0 :(得分:0)
在Windows 7和Windows 10上,我有相同的错误,因为我试图创建快捷方式来访问尚不存在的文件。
[Icons]
; Create icons for the app
Name: "{group}\{#AppName}"; \
Filename: "{app}\{#AppName}.lnk"; \
BeforeInstall: CreateAppRunLink();
Name: "{commondesktop}\{#AppName}"; \
Filename: "{app}\{#AppName}.lnk"; \
Tasks: desktopicon;
因此,在创建图标之前,我必须确保文件“ {app} {#AppName} .lnk”存在: 转到[代码]部分:
procedure CreateAppRunLink();
var
Filename: string;
Description: string;
ShortcutTo: string;
Parameters: string;
WorkingDir: string;
IconFilename: string;
begin
Filename := ExpandConstant('{app}\MyApp.lnk');
Description := 'Description';
ShortcutTo := 'Full path to file that will be run (MyApp.exe)';
Parameters := 'parameters if any';
WorkingDir := ExpandConstant('{app}');
IconFilename := ExpandConstant('{app}') + '\icon.ico';
CreateShellLink(Filename, Description, ShortcutTo, Parameters, WorkingDir,
IconFilename, 0, SW_HIDE);
end;
从[文件]部分提取任何文件后,将调用CreateAppRunLink,以确保我们的文件就位。
希望会有所帮助。
答案 1 :(得分:0)
这可能是Windows 10的一个相对较新的功能(自1709版起),称为“受控文件夹访问”。有关打开或关闭它的说明,请参见Allow a blocked app in Windows Security。