Ветеран

Сообщения: 1274
Благодарности: 1030
|
Профиль
|
Отправить PM
| Цитировать
Цитата Batistas:
Ну дак что, мне кто-нибудь поможет? »
|
Batistas, держите, рюшечки сами добавите:
читать дальше »
Код: 
#define MyAppName "Synergetic & MaxiRu DC-P2P Pack"
#define MyAppVersion "1.0.0"
#define MyAppPublisher "-=Batista=-"
#define MyAppURL "http://synergetic-hub.org/"
#define MyAppExeName "ApexDC-s16_4.exe"
#define StartupIcon "Запускать при старте Windows"
[Setup]
AppId={{E20E5BAA-70B0-4EE4-8D27-B1E312B1C083}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
OutputDir=C:\Users\Batista\Desktop\Сборка DC++
OutputBaseFilename=Synergetic & MaxiRu DC-P2P Pack 1.0.0
SetupIconFile=C:\Users\Batista\Desktop\Сборка DC++\ApexDC-s16_4.exe\ApexDC-s16_4.exe\Icon.ico
Compression=lzma2
SolidCompression=yes
[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl
[CustomMessages]
russian.NickNamePageCaption=Информация о пользователе
russian.NickNamePageDescription=Какой ник у Вас в DC++?
russian.NickNamePageSubcaption=Укажите ник и нажмите "Далее"%n%nРекомендуемые символы в нике:%n0123456789%nabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ%n()+=[]^_{{})"%nАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя
russian.NickNamePageEditName=Имя пользователя в DC++:
russian.DownloadDirPageCaption=Выбор каталога для загрузки
russian.DownloadDirPageDescription=Где будут храниться загружаемые файлы?
russian.DownloadDirPageSubcaption=Укажите каталог для скачки (при старте он будет автоматически "расшарен")
russian.ShareDirPageCaption=Выбор каталога для общего доступа
russian.ShareDirPageDescription=Где будут храниться файлы для общего доступа?
russian.ShareDirPageSubcaption=Укажите каталог для файлов общего доступа
[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked; OnlyBelowVersion: 0,6.1
Name: startupicon; Description: {#StartupIcon}; GroupDescription: {cm:AdditionalIcons}
[Files]
Source: "ApexDC-s16_4.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\Batista\Desktop\Сборка DC++\ApexDC-s16_4.exe\ApexDC-s16_4.exe\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
[Icons]
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}
Name: {group}\{cm:ProgramOnTheWeb,{#MyAppName}}; Filename: {#MyAppURL}
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}
Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: desktopicon
Name: {userstartup}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: startupicon
[Run]
Filename: {app}\{#MyAppExeName}; Description: {cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}; Flags: nowait postinstall skipifsilent
Filename: {#MyAppURL}; Verb: open; Description: Посетить сайт проекта Synergetic & MaxiRu; Flags: postinstall shellexec skipifsilent
[code]
var
NickNamePage: TInputQueryWizardPage;
DownloadDirPage, ShareDirPage: TInputDirWizardPage;
AboutInfoButton: TButton;
URLlink: TLabel;
procedure CreateDCPlusPlus(Filename: String);
var
objXMLDoc: Variant;
begin
try
objXMLDoc := CreateOleObject('Microsoft.XMLDOM');
except
ShowExceptionMessage;
Exit;
end;
objXMLDoc.async := False;
objXMLDoc.AppendChild(objXMLDoc.createProcessingInstruction('xml', 'version="1.0" encoding="utf-8" standalone="yes"'));
objXMLDoc.AppendChild(objXMLDoc.createNode(1, 'DCPlusPlus', ''));
//settings node
objXMLDoc.selectSingleNode('DCPlusPlus').AppendChild(objXMLDoc.createNode(1, 'Settings', ''));
//nick node
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'Nick', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/Nick').text := NickNamePage.Values[0];
//downdir node
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'DownloadDirectory', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/DownloadDirectory').text := DownloadDirPage.Values[0];
//russian xml
if FileExists(ExpandConstant('{app}\Settings\Russian.xml')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'LanguageFile', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/LanguageFile').text := 'Russian.xml';
end;
//sounds
if FileExists(ExpandConstant('{app}\Sounds\PrivateMessage.wav')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'BeepFile', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/BeepFile').text := 'PrivateMessage.wav';
end;
if FileExists(ExpandConstant('{app}\Sounds\DownloadBegins.wav')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'BeginFile', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/BeginFile').text := 'DownloadBegins.wav';
end;
if FileExists(ExpandConstant('{app}\Sounds\DownloadFinished.wav')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'FinishedFile', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/FinishedFile').text := 'DownloadFinished.wav';
end;
if FileExists(ExpandConstant('{app}\Sounds\AltSourceAdded.wav')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'SourceFile', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/SourceFile').text := 'AltSourceAdded.wav';
end;
if FileExists(ExpandConstant('{app}\Sounds\UploadFinished.wav')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'UploadFile', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/UploadFile').text := 'UploadFinished.wav';
end;
if FileExists(ExpandConstant('{app}\Sounds\FakerFound.wav')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'FakerFile', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/FakerFile').text := 'FakerFound.wav';
end;
if FileExists(ExpandConstant('{app}\Sounds\MyNickInMainChat.wav')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'ChatNameFile', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/ChatNameFile').text := 'MyNickInMainChat.wav';
end;
if FileExists(ExpandConstant('{app}\Sounds\FileCorrupted.wav')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'SoundTTH', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/SoundTTH').text := 'FileCorrupted.wav';
end;
if FileExists(ExpandConstant('{app}\Sounds\UnhandledException.wav')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'SoundException', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/SoundException').text := 'UnhandledException.wav';
end;
if FileExists(ExpandConstant('{app}\Sounds\HubConnected.wav')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'SoundHubConnected', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/SoundHubConnected').text := 'HubConnected.wav';
end;
if FileExists(ExpandConstant('{app}\Sounds\HubDisconnected.wav')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'SoundHubDisconnected', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/SoundHubDisconnected').text := 'HubDisconnected.wav';
end;
if FileExists(ExpandConstant('{app}\Sounds\FavUser.wav')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'SoundFavUserOnline', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/SoundFavUserOnline').text := 'FavUser.wav';
end;
if FileExists(ExpandConstant('{app}\Sounds\FavUserDisconnected.wav')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'SoundFavUserOffline', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/SoundFavUserOffline').text := 'FavUserDisconnected.wav';
end;
//share node
objXMLDoc.selectSingleNode('DCPlusPlus').AppendChild(objXMLDoc.createNode(1, 'Share', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Share').AppendChild(objXMLDoc.createNode(1, 'Directory', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Share/Directory').setAttribute('Virtual', ExtractFileName(RemoveBackSlash(ShareDirPage.Values[0])));
objXMLDoc.selectSingleNode('//DCPlusPlus/Share/Directory').text := ShareDirPage.Values[0];
//prevapps node
objXMLDoc.selectSingleNode('DCPlusPlus').AppendChild(objXMLDoc.createNode(1, 'PreviewApps', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/PreviewApps').AppendChild(objXMLDoc.createNode(1, 'Application', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/PreviewApps/Application').setAttribute('Name', 'AVI Preview');
objXMLDoc.selectSingleNode('//DCPlusPlus/PreviewApps/Application').setAttribute('Application', ExpandConstant('{app}\AVIPreview.exe'));
objXMLDoc.selectSingleNode('//DCPlusPlus/PreviewApps/Application').setAttribute('Arguments', '%[file]');
objXMLDoc.selectSingleNode('//DCPlusPlus/PreviewApps/Application').setAttribute('Extension', 'avi;divx;mpg;mpeg;vob');
objXMLDoc.save(Filename);
end;
function ReadDCPlusPlus(Filename, Node, Default: String): String;
var
objXMLDoc: Variant;
begin
Result := Default;
if not FileExists(Filename) then Exit;
try
objXMLDoc := CreateOleObject('Microsoft.XMLDOM');
except
ShowExceptionMessage;
Exit;
end;
objXMLDoc.load(Filename);
objXMLDoc.async := False;
if objXMLDoc.parseError.errorCode <> 0 then Exit;
Result := objXMLDoc.selectSingleNode(Node).text;
end;
procedure CreateNickNamePage;
begin
NickNamePage := CreateInputQueryPage(wpSelectTasks, ExpandConstant('{cm:NickNamePageCaption}'), ExpandConstant('{cm:NickNamePageDescription}'), ExpandConstant('{cm:NickNamePageSubcaption}'));
NickNamePage.Add(ExpandConstant('{cm:NickNamePageEditName}'), False);
NickNamePage.Values[0] := ReadDCPlusPlus(WizardDirValue + '\Settings\DCPlusPlus.xml', '//DCPlusPlus/Settings/Nick', '');
end;
procedure CreateDownloadDirPage;
begin
DownloadDirPage := CreateInputDirPage(NickNamePage.ID, ExpandConstant('{cm:DownloadDirPageCaption}'), ExpandConstant('{cm:DownloadDirPageDescription}'), ExpandConstant('{cm:DownloadDirPageSubcaption}'), False, 'Новая папка');
DownloadDirPage.Add('');
DownloadDirPage.Values[0] := ReadDCPlusPlus(WizardDirValue + '\Settings\DCPlusPlus.xml', '//DCPlusPlus/Settings/DownloadDirectory', WizardDirValue + '\Settings\Downloads');
end;
procedure CreateShareDirPage;
begin
ShareDirPage := CreateInputDirPage(DownloadDirPage.ID, ExpandConstant('{cm:ShareDirPageCaption}'), ExpandConstant('{cm:ShareDirPageDescription}'), ExpandConstant('{cm:ShareDirPageSubcaption}'), False, 'Новая папка');
ShareDirPage.Add('');
ShareDirPage.Values[0] := ReadDCPlusPlus(WizardDirValue + '\Settings\DCPlusPlus.xml', '//DCPlusPlus/Share/Directory', '');
end;
procedure ControlOnClick(Sender: TObject);
var
ResultCode: Integer;
begin
if Sender is TButton then MsgBox('bla-bla-bla', mbInformation, MB_OK);
if Sender is TLabel then ShellExec('open', '{#MyAppURL}', '', '', SW_SHOW, ewNoWait, ResultCode);
end;
procedure CreateAboutInfoButton;
begin
AboutInfoButton := TButton.Create(WizardForm);
with AboutInfoButton do begin
Parent := WizardForm;
SetBounds(WizardForm.ClientWidth - WizardForm.CancelButton.Left - WizardForm.CancelButton.Width, WizardForm.CancelButton.Top, WizardForm.CancelButton.Width, WizardForm.CancelButton.Height);
Caption := 'About...';
OnClick := @ControlOnClick;
end;
end;
procedure CreateURLlink;
begin
URLlink := TLabel.Create(WizardForm);
with URLlink do begin
Parent := WizardForm;
Left := 2*AboutInfoButton.Left + AboutInfoButton.Width;
Top := AboutInfoButton.Top + AboutInfoButton.Height - Height;
Caption := '{#MyAppURL}';
Font.Color := clBlue;
Font.Style := [fsUnderline];
Cursor := crHand;
OnClick := @ControlOnClick;
end;
end;
procedure InitializeWizard();
begin
CreateNickNamePage;
CreateDownloadDirPage;
CreateShareDirPage;
CreateAboutInfoButton;
CreateURLlink;
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
case CurStep of
ssPostInstall: CreateDCPlusPlus(ExpandConstant('{app}\Settings\DCPlusPlus.xml'));
end;
end;
|