Inno Setup - создание папки в общедоступных пользовательских документах в Windows 10 - PullRequest
1 голос
/ 08 марта 2019

Я пытаюсь добавить в установку папку, которая в конечном итоге будет содержать выходные данные пользователя.Я не могу поместить папку в Program Files, потому что пользователи не будут иметь необходимых разрешений для записи в нее.

Если она не устанавливается в Program Files, тогда папка данных может быть создана внутри приложения.папка (это работает нормально).

У меня есть небольшой кусочек кода, чтобы определить, была ли произведена установка в Program Files, и, если это так, я хотел использовать CreateDir(), чтобы создать папку данных в C:\Users\Public\Documents\{'MyAppName}\DB Это похоже на ошибку, в [Code] даже при том, что стандартный скрипт Inno Setup работает:

[Dirs]
Name: "{commondocs}\{#MyAppName}\DB"

Я использую процедуру DeinitialiseSetup(), чтобы сделать это в конце установки, как только путьявляется определенным.

Это мой код:

[Code]
  procedure DeinitializeSetup();
  begin
    { If it has been installed in the Program Files Folder put DB in Public Documents }
    if Pos(ExpandConstant('{pf}'),ExpandConstant('{app}')) > 0 then                       
    begin
      if not CreateDir (ExpandConstant('{commondocs}\{#MyAppName}\DB')) then
        MsgBox('Error: Data folder could not be created.', mbInformation, MB_OK);
    end
      else
    begin
      if not CreateDir (ExpandConstant('{app}\DB')) then
        MsgBox('Error: Data folder could not be created.', mbCriticalError, MB_OK);
     end;
  end;

Следуя другому предложению SO, я использовал:

PrivilegesRequired=lowest

в скрипте, но он не работал с или безэтот.Я начинаю думать, что это может быть проблема с разрешениями, но я не уверен, почему, поскольку стандартный скрипт установщика [Dirs] работает нормально.

Это не то же самое, что и другие вопросы относительно определения пути - у меня естьполучил все пути, которые я хочу, только: [Code] CreateDir() не может создать папку в {commondocs}.

Большое спасибо за любые предложения.

1 Ответ

1 голос
/ 08 марта 2019

Я предполагаю, что {commondocs}\{#MyAppName} не существует.CreateDir функция может создать только один каталог.Он не создаст для вас родительские папки, если они не существуют (в отличие от [Dirs] записи раздела).

Вы можете использовать ForceDirectories function вместо:

Создает все каталоги по указанному пути каталога одновременно.


Примечание: не используйте DeinitializeSetup для создания каталогов - Is запускается, даже еслиустановка завершается неудачно или даже если пользователь отменяет установку.

Использование CurStepChanged(ssPostInstall):

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssPostInstall then
  begin
    { Your code }
  end;
end;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...