PDA

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


Страниц : 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 126 127 128 129 [130] 131 132 133

Imitri7
30-10-2010, 13:43
del

STRAYKER
30-10-2010, 14:43
как сделать чтобы файлы были не >>>> Setup-1a.bin Setup-1b.bin ......
а было Setup-1.bin Seup-2.bin

somename
30-10-2010, 15:38
Как полчить домашнюю папку пользователя который запустил инсталл? {userdocs} возвращает папку админа, так как для инстала нужны права админа, %USERPROFILE возвращает также папку админа. {commondocs} не подходит

shao
30-10-2010, 17:18
Filename: "{sys}\cmd.exe"; Parameters: /c Reg Delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "ShellPicture" /f; Flags: runhidden

Подскажите пож. , как правильно оформить этот код.
При компиляции виходит ошибка о кавычках :

Mismatched or misplaced quotes on parameter "Parameters"

И как правильно кавычки указать. Уже пробовал вот так :

Filename: "{sys}\cmd.exe"; Parameters: "/c Reg Delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "ShellPicture" /f"; Flags: runhidden

Всё-равно ошибка.

kotkovets
30-10-2010, 17:39
shao,
Попробуй так
Filename: {sys}\reg.exe; Parameters: Delete ""HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"" /v ""ShellPicture"" /f""; Flags: runhidden

Serega
30-10-2010, 17:50
а было Setup-1.bin Seup-2.bin »
Удалите из секции [Setup] - SlicesPerDisk

Как полчить домашнюю папку пользователя который запустил инсталл? {userdocs} возвращает папку админа, так как для инстала нужны права админа, %USERPROFILE возвращает также папку админа »
А при чем тут права для инсталлятора и папка текущего пользователя? Простой пример:


[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.

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

[Code]
function InitializeSetup(): Boolean;
begin
MsgBox(ExpandConstant('{%USERPROFILE}'), mbInformation, MB_OK);
end;


После запуска инсталлятора, появится сообщение в котором будет указан полный путь до папки текущего пользователя, из под которого запущен инсталлятор.

Уже пробовал вот так : »
Удвойте внутренние кавычки, т.е. должно быть:

Filename: "{sys}\cmd.exe"; Parameters: "/c Reg Delete ""HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"" /v ""ShellPicture"" /f"; Flags: runhidden


Попробуй так »
не правильно, все кавычки внутри параметров, если есть, то должны быть двойными, а обрамляться одинарными

shao
30-10-2010, 18:20
Исходя из все кавычки внутри параметров, если есть, то должны быть двойными, а обрамляться одинарными »

вариант от kotkovets должен быть такой
Filename: {sys}\reg.exe; Parameters: "Delete ""HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"" /v ""ShellPicture"" /f"; Flags: runhidden

Верно ?

kotkovets
30-10-2010, 18:31
Filename: {sys}\reg.exe; Parameters: "Delete ""HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"" /v ""ShellPicture"" /f"; Flags: runhidden »
Верно ? »
Верно, если путь к системной папке нету пробелов
Filename: "{sys}\reg.exe"; Parameters: "Delete ""HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"" /v ""ShellPicture"" /f"; Flags: runhidden
Работает и так, если путь к системной папке есть пробелы или нету

superalex
31-10-2010, 02:41
Такая проблема в папке maps большое количество файлов, примерно на 1GB после компиляции установщик весит 611мб. Проблема в том что после компиляции ярлык pack.ico не прикрепляется то есть устанавливается обычный системный ярлык. Проверял скрипт на нескольких файлах в папке - все нормально. Как сделать чтобы при больших количествах файлов прикреплялся нормально ярлык к установщику? Моя версия inno setup 5.3.9 unicode

код:

[Setup]
AppName=BigMapPack
AppVersion=1.0
AppPublisher=Publisher
AppPublisherURL=http://www.site.ru./
AppVerName=BigMapPack version 1.0
DefaultDirName={pf}\Steam\SteamApps\<your steam login>
Compression=lzma2
SetupIconFile=pack.ico <------- этот ярлык не крепится при большом количестве файлов
WizardImageFile=logo.bmp
Uninstallable=no

[Files]
Source: "maps\*"; DestDir: "{app}\counter-strike source\cstrike\maps";

[Languages]
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl"
Name: "en"; MessagesFile: "compiler:Default.isl"
[Messages]
ru.SelectDirBrowseLabel=Вместо <your steam login> введите ваш логин в steam, программа сама установит в директорию с:\program files\steam\SteamApps\<ваш логин в steam>\counter-strike source\cstrike\maps
en.SelectDirBrowseLabel=Enter your steam login, end click next

somename
31-10-2010, 07:53
А при чем тут права для инсталлятора и папка текущего пользователя? Простой пример: »
Спасибо за ответ! Но вот в чем проблема, когда на виндовс 7 запускаешь инсталятор, он спрашивает пароль админа, и запускает инсталл от его имени, в итоге твоя программа вывела путь к папке админа а не к папке запустившего юзера..

Serega
31-10-2010, 08:45
в итоге твоя программа вывела путь к папке админа а не к папке запустившего юзера. »
В том то всё и дело, что на данный момент для инсталлятора, админ и есть текущий пользователь, т.к. именно он и запустил инсталлятор...
Да, конечно интересная ситуация, но попробуйте так:


[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra64
InternalCompressLevel=ultra64
SolidCompression=yes

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

[Code]
function SHGetSpecialFolderPath(hwndOwner: HWND; lpszPath: PAnsiChar; nFolder: Integer; fCreate: BOOL): BOOL;
external 'SHGetSpecialFolderPathA@shell32.dll stdcall';

const
MAX_PATH = 260;
// Папка пользователя (обычно C:\Documents and Settings\username)
CSIDL_PROFILE = $28;

function GetSpecialPath(CSIDL: Word): string;
var
s: string;
begin
SetLength(s, MAX_PATH);
if not SHGetSpecialFolderPath(0, PAnsiChar(s), CSIDL, True) then s := '';
Result := PAnsiChar(s);
end;

function InitializeSetup(): Boolean;
begin
// определим расположение папки пользователя
MsgBox(GetSpecialPath(CSIDL_PROFILE), mbInformation, MB_OK);
end;


Запустите инсталлятор от имени админа и какой путь покажет в сообщении?
Ну откровенно говоря, мне кажется, что должен показать папку админа...

somename
31-10-2010, 08:49
Запустите инсталлятор от имени админа и какой путь покажет в сообщении?
Ну откровенно говоря, мне кажется, что должен показать папку админа... »
Так и есть, папка админа. На сайте инно сетап еще было написано про жту проблему но про решение ничего не сказано.
p.s. я и батник бытался запускать после установки, но он также от админа запусскается..

Imitri7
31-10-2010, 10:25
как сделать выбор записей реестра в зависимости от выбранных компонентов?

Serega
31-10-2010, 11:09
Так и есть, папка админа. »
Немного поразмыслив и поковырявшись в реестре... накидал такой пример, попробуйте:

Ссылка на исправленный скрипт (http://www.forum.oszone.ru/post-1534101.html#post1534101)


при редактировании ссылки, случайно удалил ответ Imitri7

somename
31-10-2010, 11:40
Немного поразмыслив и поковырявшись в реестре... накидал такой пример, попробуйте: »
На windows 7 пустое окошко.. Ладно, видимо придется обратится к другому инсталлеру

R.i.m.s.k.y.
01-11-2010, 08:58
Ладно, видимо придется обратится к другому инсталлеру »
Да ладно, к другому инсталлеру, напишите сюда нормальный путь к папке на диске ЦЭ, и в скрипте Сереги я бы подставил UpperCase()

(Pos(UpperCase(LogonUser), UpperCase(Result))

чтобы все буквы при сравнении были большими.


А вообще я бы в коде подписал

MsgBox('{localappdata} ' + ' = ' + ExpandConstant('{localappdata}'), mbInformation, MB_OK);
MsgBox('{userappdata}' + ' = ' + ExpandConstant('{userappdata}'), mbInformation, MB_OK);
MsgBox('{commonappdata}' + ' = ' + ExpandConstant('{commonappdata}'), mbInformation, MB_OK);

ну и тд перебрать все константы:
{userdesktop} & {commondesktop} *
{userdocs} & {commondocs}
{userfavorites} & {commonfavorites} *
{userfavorites}.
{userprograms} & {commonprograms} *
{userstartmenu} & {commonstartmenu} *
{userstartup} & {commonstartup} *
{usertemplates} & {commontemplates} *

Будет видно какая константа на какую папку ссылается


Когда у меня возникла необходимость в папках юзера я тоже писал код, похожий как у Сереги, а потом просто сделал перебор папок с выводом на экран - и о чудо, папка нашлась в списке ;)

STRAYKER
01-11-2010, 16:48
как сделать чтобы в конце установки игры , предлагало установить дополнительные программы

R.i.m.s.k.y.
01-11-2010, 16:53
как сделать чтобы в конце установки игры , предлагало установить дополнительные программы »
[RUN]
Filename: {src}\directx\dxsetup.exe; Description: установить Дирекс; Flags: shellexec skipifsilent postinstall

самый главный флаг - postinstall, именно он указывает будет ли строчка с выбором.
shellexec - запустить от оболочки (полезно для файлов помощи, страничек...)
skipifsilent и так понятно

Henry_Townsend
01-11-2010, 18:55
Доброго времени суток. Обращаюсь с таким нелёгким вопросом - как можно запретить выполнение "LoadButtonImage(WizardForm.CancelButton,bidCancel)" на странице завершения, если запуск функции производится на странице установки?

Habetdin
01-11-2010, 22:14
superalex, попробуйте посмотреть на свой инсталлятор в Total Commander - иконка будет показываться. А то, что ее в проводнике не видно - "фича" от майкрософт :)
Можете сделать так:
[Setup]
DiskSpanning=true
Тогда в проводнике тоже будет видна иконка, а инсталлятор разделится на несколько "кусков" — *exe + *bin




© OSzone.net 2001-2012