Avatar
sitemap
Neregistrovaný
Avatar
sitemap:

Dobrý den,

všude už dlouho zoufale hledám instalační program pro můj baby program. Snažim se docílit toho aby když uživatel nemá instalovaný framework, tak aby mu instalace sama stáhla a nainstalovala framework před instalací programu. Vytvořil jsem tedy instalaci ve visual studiu 2008 instalaci na cd (publish). To funguje pěkně. Jen je problém, že to není v jednom instalačním souboru. Tak jsem se pokusil to ve visual studiu udelat do msi. Povedlo se mi to a byl jsem spokojený jako dítě pod stromečkem. Při testování se potvrdila má obava a to, že pokud neni instalován framework, tak vyskočí hláška a pokud zadám, že souhlasím, tak mne přesměruje na stránku, kde si ho mám ručně stáhnout a nainstalovat.

Verze autorunu pro cd je příjemnější tím, že vše udělá sama. Chci se tedy zeptat jak to řešíte nebo by jste udělali vy? Jde mi o to aby instalace zjistila přítomnost frameworku a pokud není, tak aby si jí sama stáhla a po instalaci frameworku pokračovala mím souborem.

Děkuji všem za případné rady a pomoc. Vážně jsem už zoufale v rohu :-(

 
Odpovědět 23.3.2013 10:43
Avatar
Vojtěch Pospíchal:

Pokud vím tak tohle by měl umět externí instalátor typu: Advance Installer, nebo Inno setup compiler. U advance installeru vím že si to tam můžeš naklikat u Inno setupu už si tím nejsem jistý. Každopádně zde: http://www.itnetwork.cz/…tup-compiler
máš odkaz na vytvoření jednoduchého instalátoru v Innu.

 
Nahoru Odpovědět 23.3.2013 11:11
Avatar
sitemap
Neregistrovaný
Avatar
Odpovídá na Vojtěch Pospíchal
sitemap:

Děkuju za radu a nechci aby to znělo nevděčně, ale inno znám a to umí jen zjistit zda je v PC framework instalován a případně odkázat na soubor ke stažení. To je právě to co mi vadilo na msi. To samé mám, ale chci dosáhnout toho, že instalátor zjistí přítomnost a pokud není, tak bud stáhnout a následně instalovat v procesu instalace nebo treba by v balíčku framework byl a jen si ho v nepřítomnosti vzal a rovnou instaloval. Následně by pokračoval v instalaci souboru.

 
Nahoru Odpovědět 23.3.2013 14:10
Avatar
Odpovídá na sitemap
Vojtěch Pospíchal:

V tom případě zkus ten Advance Installer :D Myslím že ten to umí.

 
Nahoru Odpovědět 23.3.2013 14:38
Avatar
sitemap
Neregistrovaný
Avatar
Odpovídá na Vojtěch Pospíchal
sitemap:

Ten jsem teď otestoval a ten to taky neumí. Inno to umí, ale dopátral jsem se tohodle kodu, který je prý funkční, ale nechápu kam mám dát tu knihovnu. Sice jsem jí sehnal, ale nevim kam jí mám umístit. Přikládám kod:

[Code]
var
dotnetRedistPath: string;
downloadNeeded: boolean;
dotNetNeeded: boolean;
memoDependenci­esNeeded: string;

procedure isxdl_AddFile(URL, Filename: PChar);
external 'isxdl_AddFile@fi­les:isxdl.dll stdcall';
function isxdl_Download­Files(hWnd: Integer): Integer;
external 'isxdl_Downlo­adFiles@files:is­xdl.dll stdcall';
function isxdl_SetOpti­on(Option, Value: PChar): Integer;
external 'isxdl_SetOpti­on@files:isxdl­.dll stdcall';

const
dotnetRedistURL = 'http://www.mi­crosoft.com/dow­nloads/info.as­px?na=90&p=&SrcDis­playLang=cs&SrcCa­tegoryId=&SrcFa­milyId=0856eacb-4362-4b0d-8edd-aab15c5e04f5&­u=http%3a%2f%2fdow­nload.microsof­t.com%2fdownlo­ad%2f5%2f6%2f7%2f567758a3-759e-473e-bf8f-52154438565a%­2fdotnetfx.exe';
// local system for testing...
// dotnetRedistURL = 'http://local­host/dotnetfx­.exe';

function InitializeSetup(): Boolean;

begin
Result := true;
dotNetNeeded := false;

// Check for required netfx installation
if (not RegKeyExists(HKLM, 'Software\Micro­soft\.NETFrame­work\policy\v2­.0')) then begin
dotNetNeeded := true;
if (not IsAdminLoggedOn()) then begin
MsgBox('App needs the Microsoft .NET Framework to be installed by an Administrator', mbInformation, MB_OK);
Result := false;
end else begin
memoDependenci­esNeeded := memoDependenci­esNeeded + ' .NET Framework 2.0' #13;
dotnetRedistPath := ExpandConstan­t('{src}\dotnet­fx.exe');
if not FileExists(dot­netRedistPath) then begin
dotnetRedistPath := ExpandConstan­t('{tmp}\dotnet­fx.exe');
if not FileExists(dot­netRedistPath) then begin
isxdl_AddFile(dot­netRedistURL, dotnetRedistPath);
downloadNeeded := true;
end;
end;
SetIniString('in­stall', 'dotnetRedist', dotnetRedistPath, ExpandConstan­t('{tmp}\dep.i­ni'));
end;
end;

end;

function NextButtonClic­k(CurPage: Integer): Boolean;
var
hWnd: Integer;
ResultCode: Integer;

begin
Result := true;

if CurPage = wpReady then begin

hWnd := StrToInt(Expan­dConstant('{wi­zardhwnd}'));

// don't try to init isxdl if it's not needed because it will error on < ie 3
if downloadNeeded then begin

isxdl_SetOpti­on('label', 'Downloading Microsoft .NET Framework');
isxdl_SetOpti­on('descripti­on', 'App needs to install the Microsoft .NET Framework. Please wait while Setup is downloading extra files to your computer.');
if isxdl_Download­Files(hWnd) = 0 then Result := false;
end;
if (Result = true) and (dotNetNeeded = true) then begin
if Exec(ExpandCon­stant(dotnetRe­distPath), '', '', SW_SHOW, ewWaitUntilTer­minated, ResultCode) then begin
// handle success if necessary; ResultCode contains the exit code
if not (ResultCode = 0) then begin
Result := false;
end;
end else begin
// handle failure if necessary; ResultCode contains the error code
Result := false;
end;
end;
end;
end;

function UpdateReadyMe­mo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String;
var
s: string;

begin
if memoDependenci­esNeeded <> '' then s := s + 'Dependencies to install:' + NewLine + memoDependenci­esNeeded + NewLine;
s := s + MemoDirInfo + NewLine + NewLine;

Result := s
end;

 
Nahoru Odpovědět 23.3.2013 16:45
Avatar
Odpovídá na sitemap
Vojtěch Pospíchal:

Používej prosím tagu kód takto je to neuvěřitelně nepřehledné.

Editováno 23.3.2013 19:53
 
Nahoru Odpovědět 23.3.2013 19:53
Avatar
sitemap
Neregistrovaný
Avatar
sitemap:

Ten jsem teď otestoval a ten to taky neumí. Inno to umí, ale dopátral jsem se tohodle kodu, který je prý funkční, ale nechápu kam mám dát tu knihovnu. Sice jsem jí sehnal, ale nevim kam jí mám umístit. Přikládám kod:

var
dotnetRedistPath: string;
downloadNeeded: boolean;
dotNetNeeded: boolean;
memoDependenciesNeeded: string;

procedure isxdl_AddFile(URL, Filename: PChar);
external 'isxdl_AddFile@files:isxdl.dll stdcall';
function isxdl_DownloadFiles(hWnd: Integer): Integer;
external 'isxdl_DownloadFiles@files:isxdl.dll stdcall';
function isxdl_SetOption(Option, Value: PChar): Integer;
external 'isxdl_SetOption@files:isxdl.dll stdcall';

const
dotnetRedistURL = 'http://www.microsoft.com/downloads/info.aspx?na=90&p=&SrcDisplayLang=cs&SrcCategoryId=&SrcFamilyId=0856eacb-4362-4b0d-8edd-aab15c5e04f5&u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2f5%2f6%2f7%2f567758a3-759e-473e-bf8f-52154438565a%2fdotnetfx.exe';
// local system for testing...
// dotnetRedistURL = 'http://localhost/dotnetfx.exe';

function InitializeSetup(): Boolean;

begin
Result := true;
dotNetNeeded := false;

// Check for required netfx installation
if (not RegKeyExists(HKLM, 'Software\Microsoft\.NETFramework\policy\v2.0')) then begin
dotNetNeeded := true;
if (not IsAdminLoggedOn()) then begin
MsgBox('App needs the Microsoft .NET Framework to be installed by an Administrator', mbInformation, MB_OK);
Result := false;
end else begin
memoDependenciesNeeded := memoDependenciesNeeded + ' .NET Framework 2.0' #13;
dotnetRedistPath := ExpandConstant('{src}\dotnetfx.exe');
if not FileExists(dotnetRedistPath) then begin
dotnetRedistPath := ExpandConstant('{tmp}\dotnetfx.exe');
if not FileExists(dotnetRedistPath) then begin
isxdl_AddFile(dotnetRedistURL, dotnetRedistPath);
downloadNeeded := true;
end;
end;
SetIniString('install', 'dotnetRedist', dotnetRedistPath, ExpandConstant('{tmp}\dep.ini'));
end;
end;

end;

function NextButtonClick(CurPage: Integer): Boolean;
var
hWnd: Integer;
ResultCode: Integer;

begin
Result := true;

if CurPage = wpReady then begin

hWnd := StrToInt(ExpandConstant('{wizardhwnd}'));

// don't try to init isxdl if it's not needed because it will error on < ie 3
if downloadNeeded then begin

isxdl_SetOption('label', 'Downloading Microsoft .NET Framework');
isxdl_SetOption('description', 'App needs to install the Microsoft .NET Framework. Please wait while Setup is downloading extra files to your computer.');
if isxdl_DownloadFiles(hWnd) = 0 then Result := false;
end;
if (Result = true) and (dotNetNeeded = true) then begin
if Exec(ExpandConstant(dotnetRedistPath), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then begin
// handle success if necessary; ResultCode contains the exit code
if not (ResultCode = 0) then begin
Result := false;
end;
end else begin
// handle failure if necessary; ResultCode contains the error code
Result := false;
end;
end;
end;
end;

function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String;
var
s: string;

begin
if memoDependenciesNeeded <> '' then s := s + 'Dependencies to install:' + NewLine + memoDependenciesNeeded + NewLine;
s := s + MemoDirInfo + NewLine + NewLine;

Result := s
end;
 
Nahoru Odpovědět 23.3.2013 20:02
Avatar
sitemap
Neregistrovaný
Avatar
sitemap:

Už o nic nejde. Zadal jsem to jako zakázku a rád si to zaplatím :-)

 
Nahoru Odpovědět 24.3.2013 14:21
Avatar
denoy
Člen
Avatar
denoy:

Já si nedávno dělal aplikaci, která mi framework 4 sama stáhla společně se SP3 na win XP, dělal jsem to v C# 2005 tedy Framework 2.0, ten už má každý win7, jen u čistého win XP ještě není.

 
Nahoru Odpovědět 24.3.2013 18:42
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.