PDA

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 6]


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 [58] 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

vint56
22-09-2013, 12:28
Антон_Мураткин@vk

#define AppName "Crysis"
#define AppVersion "1.0"
#define MainExe "{app}\Bin32\crysis.exe"
#define MainExe64 "{app}\Bin64\crysis.exe"
#define MainExeDir Copy(MainExe, 1, RPos("\", MainExe)-1)
#define MainExe64Dir Copy(MainExe64, 1, RPos("\", MainExe64)-1)

[Setup]
AppName={#AppName}
AppVersion={#AppVersion}
DefaultDirName={pf}\{#AppName}
DefaultGroupName={#AppName}

[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}";

[Icons]
Name: "{group}\{#AppName}"; FileName: "{#MainExe64}"; WorkingDir: "{#MainExe64Dir}"; Check: IsWin64
Name: "{group}\{#AppName}"; FileName: "{#MainExe}"; WorkingDir: "{#MainExeDir}"; Check: not IsWin64
Name: "{userdesktop}\{#AppName}"; FileName: "{#MainExe64}"; WorkingDir: "{#MainExe64Dir}"; Tasks: desktopicon; Check: IsWin64
Name: "{userdesktop}\{#AppName}"; FileName: "{#MainExe}"; WorkingDir: "{#MainExeDir}"; Tasks: desktopicon; Check: not IsWin64
Name: "{group}\{cm:UninstallProgram,{#AppName}}"; Filename: "{uninstallexe}"

Антон_Мураткин@vk
22-09-2013, 12:48
vint56, #define AppName "Crysis"
#define AppVersion "1.0"
#define MainExe "{app}\Bin32\crysis.exe"
#define MainExe64 "{app}\Bin64\crysis.exe"
#define MainExeDir Copy(MainExe, 1, RPos("\", MainExe)-1)
#define MainExe64Dir Copy(MainExe64, 1, RPos("\", MainExe64)-1) Вот это поставить перед [Setup] и изменить на моё название игры так же и путь до ехе файла

Name: "{group}\{#AppName}"; FileName: "{#MainExe64}"; WorkingDir: "{#MainExe64Dir}"; Check: IsWin64
Name: "{group}\{#AppName}"; FileName: "{#MainExe}"; WorkingDir: "{#MainExeDir}"; Check: not IsWin64
Name: "{userdesktop}\{#AppName}"; FileName: "{#MainExe64}"; WorkingDir: "{#MainExe64Dir}"; Tasks: desktopicon; Check: IsWin64
Name: "{userdesktop}\{#AppName}"; FileName: "{#MainExe}"; WorkingDir: "{#MainExeDir}"; Tasks: desktopicon; Check: not IsWin64
Name: "{group}\{cm:UninstallProgram,{#AppName}}"; Filename: "{uninstallexe}

А здесь надо что нибудь менять на своё? Вроде не надо!!!

Nordek
22-09-2013, 13:58
Антон_Мураткин@vk, Name: "{group}\{cm:UninstallProgram,{#AppName}}"; Filename: "{uninstallexe}"

Антон_Мураткин@vk
22-09-2013, 14:56
Nordek, Да вы не поняли, эта строчка у меня есть. Но только когда уже установишь програму и хочешь её удалить она выдаёт всякие ошибки

Farser21
22-09-2013, 18:09
vint56, Спасибо добрый человек)

Shkutu
24-09-2013, 16:49
Приветствую!
Есть вопрос: можно ли в инно на момент установки приложения узнать, в какой из папок ({userprograms} или {commonprograms} ) будет создаваться папка с ярлыком? Ну т е, я так понимаю, что выбор инсталлятором папки зависит от прав пользователя. Можно этот момент (права пользователя на определенную папку) как-то отследить?

saurn
24-09-2013, 17:36
Ну т е, я так понимаю, что выбор инсталлятором папки зависит от прав пользователя »
Выбор папки зависит от того, где вы указали инсталятору создавать ярлык в секции Icons:
{userprograms} - текущий пользователь.
{commonprograms} - все пользователи.

Shkutu
24-09-2013, 19:01
saurn, а если имя папки не указано, то что будет использоваться по умолчанию? И это "по умолчанию" всегда одинаковое или зависит от каких-то настроек?

saurn
24-09-2013, 20:08
а если имя папки не указано, то что будет использоваться по умолчанию? И это "по умолчанию" всегда одинаковое или зависит от каких-то настроек? »
Имя папки не может быть не указано. Константы играют ключевую роль в скрипте. Именно на основе констант создаются пути к тем или иным папкам: {app}, {group} и т.д. Если пользователь имеет права администратора, то константа common будет аналогична константе user.

Shkutu
25-09-2013, 12:20
Извините, я немного не догоняю, видимо (
Имя папки не может быть не указано »
В моем скрипте
[Icons]
Name: "{group}\{#MyAppExeName}"; Filename: "{app}\{#MyAppExeName}"
Здесь {group} - это же вроде имя папки, которая будет создана в "Пуск"-> "Программы". А в каких именно программах (общих или конкретного пользователя) здесь не указано, т е не очень понятно, для папки {group} какая папка при таком задании ярлыка будет родительской {userprograms} или {commonprograms}.
И вопрос, собственно, в том, можно ли программно определить эту самую папку, ну или есть ли у пользователя права администратора.
Если пользователь имеет права администратора, то константа common будет аналогична константе user.
Может, все-таки наоборот - если прав нет, то common будет аналогична user?

Антон_Мураткин@vk
25-09-2013, 12:42
Люди добрые, подскажите скрипта для распаковки FreeArc'ом? Самый простой без наворотов, чтобы просто распаковал во время установки. Заранее благодарю

Nordek
25-09-2013, 12:55
Здесь {group} - это же вроде имя папки »Это не имя папки, это путь/назначение.
В Inno это есть так называемая переменная как в Windows.
Например в Windows переменная %TEMP% в Inno это будет {tmp}.

А в каких именно программах (общих или конкретного пользователя) здесь не указано »
Обычно в общих "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\".

Люди добрые, подскажите скрипта для распаковки FreeArc'ом? »Смотри здесь (http://forum.ru-board.com/topic.cgi?forum=5&topic=34920&start=620).

saurn
25-09-2013, 18:30
Здесь {group} - это же вроде имя папки »
{group} - это в будущем, скажем так, имя папки. Первоначально - это константа, переменная пути. На основе нее инсталятор создает папку с именем, указанным в секции Setup.
какая папка при таком задании ярлыка будет родительской {userprograms} или {commonprograms} »
{commonprograms}
Может, все-таки наоборот - если прав нет, то common будет аналогична user? »
Нет.

P.S.
Все константы подробно описаны в справке.

Shkutu
25-09-2013, 18:47
Nordek, saurn, спасибо

El Sanchez
25-09-2013, 20:58
{group} - это в будущем, скажем так, имя папки. »
Здесь {group} - это же вроде имя папки, которая будет создана в "Пуск"-> "Программы". »
saurn, Shkutu, {group} - это полный путь будущей программной группы, общей или персональной - это уже зависит от привилегий установщика, установленных директивой PrivilegesRequired (по умолчанию admin). Установщик с привилегиями admin/poweruser будет автоматом создавать ярлыки в общей программной группе (All Users/ProgramData), lowest - в персональной (профиле пользователя). Также для установщика с админскими привилегиями можно указать создавать ярлыки не в общей группе, а в персональной, для этого предусмотрена директива AlwaysUsePersonalGroup.

{commonprograms}
Цитата Shkutu:
Может, все-таки наоборот - если прав нет, то common будет аналогична user? »
Нет. »
saurn, вообще-то, да.

Например в Windows переменная %TEMP% в Inno это будет {tmp}. »
Nordek, вообще-то, нет.

Nordek
25-09-2013, 22:55
lowest - в персональной (профиле пользователя). »Смысла не понимаю использования lowest.
Есть некоторые программы которые установленные установщиком Inno. Запуская простым кликом, запускаются без запроса UAC. Но здесь есть одно "Но", порой выбивают ошибку, и всё потому, что не могут прочитать конфигурационный файл находящийся в программной папке. С одной стороны да, то что даже если запроса от UAC не было, и если выбивает ошибку, то их нужно запускать из под администратора. Но с другой стороны, многие думают что нужно давать инсталлятору какие-то привилегии, на самом деле как оказалось административные права не нужны чтобы запустить программу без ошибки.

P.S Данную проблему почти решил и знаю почему это происходит, но пока ещё не реализовал для инсталлятора.

El Sanchez
26-09-2013, 13:12
Смысла не понимаю использования lowest. »
Nordek, поясняю привилегии установщика:

admin - однопользовательская установка; установщик имеет права пользователя из группы Администраторов в системе; установленная программа находится в системной папке Program Files, которой пользуются все; удаление программы только пользователем из группы Администраторов.
poweruser - однопользовательская установка; установщик имеет права не ниже прав пользователя из группы Опытные пользователи в системе; установленная программа находится в системной папке Program Files, которой пользуются все; удаление программы только пользователем минимум из группы Опытные пользователи.
lowest - многопользовательская установка; установщик имеет права пользователя из группы Пользователи в системе (пользователь из группы Администраторы, запустивший установщик, приравнивается к пользователю из группы Пользователи); установленная программа находится в профиле пользователя, запустившего установку (обычно в %APPDATA%); удаление индивидуально для каждого пользователя (кроме админа, тому все можно грохать).
none - однопользовательская/многопользовательская установка; установщик имеет права пользователя, запустившего установку, поэтому логика скрипта должна это учитывать; установленная программа находится в Program Files/профиле в зависимости от пользователя, запустившего установку; удаление аналогично.


Поясню почему: »


Nordek, тут либо ошибка сборщика, допустившего расположение конфигурационного файла в месте, недоступном простому обывателю, либо ошибка разработчика программы, не сумевшего заставить свое приложение читать свой же конфигурационный файл.

Johny777
26-09-2013, 13:13
El Sanchez,
Например в Windows переменная %TEMP% в Inno это будет {tmp}. »
Nordek, вообще-то, нет. »

как же?
мне пришлось вплотную с этим столкнуться, те мне нужны пути для инсталла
и темп в первую очередь

пути к папкам я получаю таким макаром (код Delphi):

function GetSpecialFolderPath(const csidl: Integer): String;
var
Buff: array[ 0..MAX_PATH] of Char;
begin
if SHGetSpecialFolderPath(0, Buff, csidl, False) then Result := Buff;
end;

http://msdn.microsoft.com/en-us/library/windows/desktop/bb762204%28v=vs.85%29.aspx
из констант
http://msdn.microsoft.com/en-us/library/windows/desktop/bb762494%28v=vs.85%29.aspx
мне нужны только
CSIDL_DESKTOP
CSIDL_COMMON_DESKTOPDIRECTORY
CSIDL_COMMON_DOCUMENTS
CSIDL_PROGRAM_FILES
CSIDL_PROGRAMS
CSIDL_DESKTOPDIRECTORY
CSIDL_MYDOCUMENTS
CSIDL_PROGRAM_FILESX86

===================

а путь к папке Temp только одним способом. Другого не знаю (код Delphi):

function GetTemp(): String;
var
Buff: array [0..MAX_PATH] of Char;
begin
if GetTempPath(Length(Buff), Buff) > 0 then Result := Buff;
end;

http://msdn.microsoft.com/en-us/library/windows/desktop/aa364992%28v=vs.85%29.aspx
и этот путь тот же самый, в котором инно создаёт временную папку и именно этот темп откроется если вбить %TEMP% в "Выполнить"
исходники инно по этому поводу я не смотрел, но уверен что пути которыми она заменят константы в строке она берёт именно при помощи вышеупомянутых функций

В общем хотелось бы понять, чтоб потом у меня весь инсалл не рухнул при запуске не из под Админа,

Gnom_aka_Lexander
26-09-2013, 13:37
как же? »
Просто. Константа {tmp} это путь к временной папке инсталлятора. А системная переменная %TEMP% это временная папка системы. собственно {tmp} - это подпапка внутри %TEMP%. И я совершенно не понимаю, при чем тут Delphi. К инно она относится только тем боком, что данный инструмент скомпилен на Delphi и имеет тот-же язык для секции [Code].
P.S. даже не тот-же, а несколько отличающийся. объектная структура классов построена чуток по другому, чем в дельфи.

El Sanchez
26-09-2013, 14:43
а путь к папке Temp только одним способом. Другого не знаю (код Delphi): »
Johny777, выбирай:

GetTempDir
GetEnv('TEMP')
ExtractFileDir(ExpandConstant('{tmp}'))




© OSzone.net 2001-2012