Показать полную графическую версию : [архив] Скрипты Inno Setup. Помощь и советы [часть 2]
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} не подходит
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
а было 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
Попробуй так »
не правильно, все кавычки внутри параметров, если есть, то должны быть двойными, а обрамляться одинарными
Исходя из все кавычки внутри параметров, если есть, то должны быть двойными, а обрамляться одинарными »
вариант от 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 запускаешь инсталятор, он спрашивает пароль админа, и запускает инсталл от его имени, в итоге твоя программа вывела путь к папке админа а не к папке запустившего юзера..
в итоге твоя программа вывела путь к папке админа а не к папке запустившего юзера. »
В том то всё и дело, что на данный момент для инсталлятора, админ и есть текущий пользователь, т.к. именно он и запустил инсталлятор...
Да, конечно интересная ситуация, но попробуйте так:
[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. я и батник бытался запускать после установки, но он также от админа запусскается..
как сделать выбор записей реестра в зависимости от выбранных компонентов?
Так и есть, папка админа. »
Немного поразмыслив и поковырявшись в реестре... накидал такой пример, попробуйте:
Ссылка на исправленный скрипт (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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC