Inno setup не может создать значок на рабочем столе в Windows 10 - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть установочный файл для установки последней версии inno.Он компилируется и прекрасно работает от Windows XP до Windows 8, но в Windows 10 происходит сбой в тот момент, когда он создает значок на рабочем столе со следующей ошибкой: IPersistFile :: Save fail;код 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 setup не может это сделать ... Все остальные значки, кроме рабочего стола, были созданы без проблем.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 08 марта 2019

Это может быть относительно новая (начиная с версии 1709) функция Windows 10, которая называется Доступ к управляемой папке .См. Разрешить заблокированное приложение в Windows Security для получения инструкций по его включению или выключению.

0 голосов
/ 06 февраля 2019

У меня была та же ошибка в 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 "существует до создания Icon: это идет в раздел [Code]:

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 будет вызываться после извлечения любых файлов из раздела [Files], что гарантируетчто наш файл на месте.

Надеюсь, это поможет.

...