Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 8]
kotyarko@fb
17-02-2016, 18:34
Reyesahydo, RegWriteStringValue(HKEY_CURRENT_USER, 'Software\AAAAA-AAAAA-AAAAA-AAAAA', '', '');
Reyesahydo
17-02-2016, 18:57
Код:
RegWriteStringValue(HKEY_CURRENT_USER, 'Software\AAAAA-AAAAA-AAAAA-AAAAA', '', ''); »
А как записать вот сюда ?
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Valve\Half-Life\Settings]
"ValveKey"="AAAAA-AAAAA-AAAAA-AAAAA-AAAAA"
Мне ключ нужно именно передач вот этому параметру
И напишите пожалуйста куда именно нужно это нужно писать
Raf-9600
17-02-2016, 20:14
Нашёл вроде бы неплохой код для проверки на наличие определённого обновления Windows https://theroadtodelphi.wordpress.com/2011/03/02/search-for-installed-windows-updates-using-delphi-wmi-and-wua/
function ISHotFixID_Installed(const HotFixID : string): Boolean;
var
updateSession : OleVariant;
updateSearcher : OleVariant;
updateEntry : OleVariant;
updateSearchResult : OleVariant;
UpdateCollection : OleVariant;
oEnum : IEnumvariant;
iValue : LongWord;
begin
result:=False;
updateSession:= CreateOleObject('Microsoft.Update.Session');
updateSearcher := updateSession.CreateUpdateSearcher;
//this line improves the performance , the online porperty indicates whether the UpdateSearcher goes online to search for updates. so how we are looking for already installed updates we can set this value to false
updateSearcher.online:=False;
updateSearchResult:= updateSearcher.Search(Format('IsInstalled = 1 and Type=%s',[QuotedStr('Software')]));
UpdateCollection := updateSearchResult.Updates;
oEnum := IUnknown(UpdateCollection._NewEnum) as IEnumVariant;
while oEnum.Next(1, updateEntry, iValue) = 0 do
begin
Result:=Pos(HotFixID,updateEntry.Title)>0;
updateEntry:=Unassigned;
if Result then break;
end;
end;
Однако проблема в том, что он несовместим с Inno. В частности компилятор жалуется на OleVariant и IEnumvariant. Кто-то может это исправить?
kotyarko@fb
17-02-2016, 20:29
А как записать вот сюда ? »Так:RegWriteStringValue(HKEY_CURRENT_USER, 'Software\Valve\Half-Life\Settings', 'ValveKey', 'AAAAA-AAAAA-AAAAA-AAAAA-AAAAA');
Reyesahydo
17-02-2016, 20:35
Так:
Код:
RegWriteStringValue(HKEY_CURRENT_USER, 'Software\Valve\Half-Life\Settings', 'ValveKey', 'AAAAA-AAAAA »
Куда его именно нужно писать ?
Использую только официальные версии! »
procedure _CancelClick ( const Sender: TObject );
begin
WizardForm.CancelButton.OnClick ( Sender );
end;
======================================================================
Куда его именно нужно писать ? »
Для этой задачи вполне достаточно секции Registry, без оперирования в коде.
[Registry]
Root: HKCU; Subkey: "Software\Valve\Half-Life\Settings"; ValueType: string; ValueName: "ValveKey"; ValueData: "AAAAA-AAAAA-AAAAA-AAAAA-AAAAA"; Flags: deletevalue;
Reyesahydo
18-02-2016, 11:37
[Registry]
Root: HKCU; Subkey: "Software\Valve\Half-Life\Settings"; ValueType: string; ValueName: "ValveKey"; ValueData: "AAAAA-AAAAA-AAAAA-AAAAA-AAAAA"; Flags: deletevalue;
Код работает не всегда (Через раз)
Можете показать как сделать код через секцию [Code] ?
kotyarko@fb
18-02-2016, 11:54
Можете показать как сделать код через секцию [code] ? »Например:
Procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
RegWriteStringValue(HKEY_CURRENT_USER, 'Software\Valve\Half-Life\Settings', 'ValveKey', 'AAAAA-AAAAA-AAAAA-AAAAA-AAAAA');
end;
Oasahelola
19-02-2016, 16:54
Мне нужно добавить много EXE-файлов создать для них ярлыки
Вопрос: Правильно ли я делаю ?
Сомневаюсь в правильности скрипта
P.S
Через мастер скриптов можно только один добавить
#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
[Setup]
AppId={{BEC44BB3-44D5-412E-B193-EBDAB39F9CDE}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files]
Source: "C:\TEST\EXE1.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\TEST\EXE2.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\TEST\EXE3.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\TEST\EXE4.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\TEST\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\EXE1.exe"
Name: "{group}\{#MyAppName}"; Filename: "{app}\EXE2.exe"
Name: "{group}\{#MyAppName}"; Filename: "{app}\EXE3.exe"
Name: "{group}\{#MyAppName}"; Filename: "{app}\EXE4.exe"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\EXE1"; Tasks: desktopicon
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\EXE2"; Tasks: desktopicon
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\EXE3"; Tasks: desktopicon
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\EXE4"; Tasks: desktopicon
Dodakaedr
19-02-2016, 17:39
Oasahelola, почти, пишите разные имена ярлыков
[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\EXE1.exe"
Name: "{group}\{#MyAppName}2"; Filename: "{app}\EXE2.exe"
Name: "{group}\{#MyAppName}3"; Filename: "{app}\EXE3.exe"
Name: "{group}\{#MyAppName}4"; Filename: "{app}\EXE4.exe"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\EXE1"; Tasks: desktopicon
Name: "{commondesktop}\{#MyAppName}2"; Filename: "{app}\EXE2"; Tasks: desktopicon
Name: "{commondesktop}\{#MyAppName}3"; Filename: "{app}\EXE3"; Tasks: desktopicon
Name: "{commondesktop}\{#MyAppName}4"; Filename: "{app}\EXE4"; Tasks: desktopicon
Требуется помощь.
Source: "{app}\msimg32.dll"; DestDir: "{app}"; MinVersion: 0.0,5.0; Flags: ignoreversion sharedfile uninsnosharedfileprompt
Данная DLL'ка добавлена в дистрибутив для регистрации. DLL'ка с таким-же именем есть в System32/
При удалении программы dll'ка не удаляется. Решение найдено такое.
[UninstallDelete]
Type: files; Name: "{app}\msimg32.dll";
Procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if (CurUninstallStep = usPostUninstall) then
UnloadDLL(ExpandConstant('{app}\msimg32.dll'));
DeleteFile(ExpandConstant('{app}\msimg32.dll'));
// MoveDir(ExpandConstant('{app}\'),ExpandConstant('{app}'));
RemoveDir(ExpandConstant('{app}'));
DelTree(ExpandConstant('{app}'), True, True, True);
RemoveDir(ExpandConstant('{pf}\ObviousIdea'));
После данной процедуры все удаляется в чистую, но сообщение Деинсталляция %1 завершена.%n%nЧасть элементов не удалось удалить. Вы можете удалить их самостоятельно. как было так и осталось, хотя нигде ничего нету.
Решение нашёл такое.
[Messages]
UninstalledMost=Программа %1 была полностью удалена с вашего компьютера.
Думаю что данное решение не совсем правильное.
В связи с тем что в System32 есть DLL'ка с таким -же именем что и для регистрации, думаю что деинсталлятор реагирует на нее и по этому выдаёт сообщение что не все удалилось.
Думаю к строке Source: нужно добавить какие то флаги, чтобы деинсталлятор не реагировал на системную DLL msimg32.dll.
Помогите решить данную проблему.
El Sanchez
19-02-2016, 20:08
Нашёл вроде бы неплохой код для проверки на наличие определённого обновления Windows https://theroadtodelphi.wordpress.co...i-wmi-and-wua/ »
Raf-9600, он плох тем, что, во-первых, долго выполняется метод Search, на моей Windows 7 x64 ~15 мин, на XP ~2 мин, во-вторых, сравнивать параметр функции со свойством Title не есть хорошо, нужно использовать KBArticleIDs.
//////////////////////////////////////////////////////////////
function IsHotFixIDInstalled(const HotFixID: string): Boolean;
var
UpdateSession, UpdateSearcher, UpdateSearchResult,
UpdateCollection, UpdateItem: Variant;
i, j, UpdatesCount: Integer;
begin
Result := False;
UpdateSession := CreateOleObject('Microsoft.Update.Session');
UpdateSearcher := UpdateSession.CreateUpdateSearcher;
UpdateSearcher.Online := False;
UpdateSearchResult := UpdateSearcher.Search('IsInstalled = 1 and Type=''Software''');
UpdateCollection := UpdateSearchResult.Updates;
UpdatesCount := StrToIntDef(UpdateCollection.Count, 0);
for i := 0 to UpdatesCount - 1 do
begin
UpdateItem := UpdateCollection.Item[i];
for j := 0 to UpdateItem.KBArticleIDs.Count - 1 do
begin
Result := (CompareText(string(UpdateItem.KBArticleIDs.Item[j]), HotFixID) = 0);
if Result then Exit;
end;
end;
end;
///////////////////////////
procedure InitializeWizard;
begin
if IsHotFixIDInstalled('2483139') then
MsgBox('yes', mbInformation, MB_OK);
end;
Source: "{app}\msimg32.dll"; DestDir: "{app}"; MinVersion: 0.0,5.0; Flags: ignoreversion sharedfile uninsnosharedfileprompt
Данная DLL'ка добавлена в дистрибутив для регистрации. DLL'ка с таким-же именем есть в System32/ »
ZVSRus, ну и зачем ее [msimg32.dll] копия в {app}? Или не копия? И зачем заводить еще и счетчик ссылок?
ну и зачем ее [msimg32.dll] копия в {app}? Или не копия?
Нет эта DLL (msimg32.dll) не копия, идет в архиве с программой для регистрации.
(Поместить файл из раздачи msimg32.dll в папку с установленной программой.)
vadjliss
21-02-2016, 11:24
ребята если у меня не сколько вот таких секций то как их объединить?
procedure CurPageChanged(CurPageID: Integer)
а, то выдаёт ошибку
http://fs5.directupload.net/images/160221/temp/zkdrf5x7.jpg (http://fs5.directupload.net/images/160221/zkdrf5x7.jpg)
kotyarko@fb
21-02-2016, 12:28
vadjliss, Procedure CurPageChanged1(CurPageID: Integer);
begin
...
end;
Procedure CurPageChanged2(CurPageID: Integer);
begin
...
end;
Procedure CurPageChanged(CurPageID: Integer);
begin
CurPageChanged1(CurPageID);
CurPageChanged2(CurPageID);
end;
vadjliss, а лучше всё в одной процедуре объединить. Чтобы путаницы не было.
ребята если у меня не сколько вот таких секций то как их объединить?
procedure CurPageChanged(CurPageID: Integer) »
Выполнять все задачи в блоке одной процедуры. Так будет намного удобней, и в плане читаемости кода особенно.
procedure CurPageChanged( CurPageID: Integer );
begin
задача 1
задача 2
end;
procedure CurPageChanged( CurPageID: Integer );
begin
задача 3
задача 4
end;
procedure CurPageChanged( CurPageID: Integer );
begin
задача 1
задача 2
задача 3
задача 4
end;
Ой, nik1967 уже пояснил. Ну да ладно.)
Карась з Днiпра
24-02-2016, 16:25
Добрый день. Подскажите пожалуйста, какие команды нужно дописать в скрипт, чтобы в случае если в директории установки программы будет найден файл с определенным именем, он будет удален автоматически. И еще одна проблемка. Если знаете, помогите плис. Столкнулся с тем, что Win10 блокирует инсталлятор. Тут я вообще безсилен, так как никогда не работал с этой ОС.
Gamattinol
24-02-2016, 17:03
134345Как сделать такой компонент ?
Как сделать такой компонент ?
[Setup]
AppName=Notepad
AppVersion=1.5
DefaultDirName={pf}\Notepad
[Code*]
var
NewGroupBox: TNewGroupBox;
procedure InitializeWizard();
begin
NewGroupBox := TNewGroupBox.Create(WizardForm);
with NewGroupBox do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(100);
Width := ScaleX(417);
Height := ScaleY(60);
Caption := 'Папка установки:';
end;
NewGroupBox.TabOrder := 5;
with WizardForm.DirBrowseButton do
begin
Left := ScaleX(334);
Top := ScaleY(23);
Parent := NewGroupBox;
end;
with WizardForm.DirEdit do
begin
Left := ScaleX(8);
Top := ScaleY(24);
Width := ScaleX(320);
Parent := NewGroupBox;
end;
end;
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.