Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: rusco en 5 Febrero 2013, 22:24 pm



Título: [INNO Setup] Que estoy haciendo mal
Publicado por: rusco en 5 Febrero 2013, 22:24 pm

[MOD] USA TÍTULOS DESCRIPTIVOS!



Hola,

Que estoy haciendo mal, el script del innosetup me instala dos veces el archivo (Numisoftware.mde)

Este que esta dentro dew Numisoftware sobra:
C:\Numisoftware\
Actualiza
DatosNumi
Programa
Numisotware.mde

Lo correcto es:
C:\Numisoftware\
Actualiza
DatosNumi
Programa\Numisoftware.mde

Os dejo el script par ver donde tengo el error.
Código:
[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{561F01CD-4A2F-4E84-B650-F586E2493B8E}
AppName=Numisoftware
AppVerName=Numisoftware 1.0
VersionInfoVersion=1.0
AppPublisher=Numisoftware
AppPublisherURL=http://www.numisoftware.com/
AppSupportURL=http://www.numisoftware.com/
AppUpdatesURL=http://www.numisoftware.com/
DefaultDirName=C:\
DisableDirPage=yes
DefaultGroupName=Numisoftware
DisableProgramGroupPage=yes
LicenseFile=C:\Numisoftware\Programa\Licencias\Lic enciaES.rtf
OutputDir=C:\Instalador
OutputBaseFilename=Numsetup
SetupIconFile=C:\Numisoftware\Programa\Iconos\numi software.ico
Compression=lzma
SolidCompression=yes
AppCopyright=Copyright © 2011 by NUMISOFTWARE
VersionInfoCompany=NUMISOFTWARE
WizardImageFile=compiler:WizModernImage-IS.bmp
WizardSmallImageFile=compiler:WizModernSmallImage-IS.bmp
WindowVisible=true
VersionInfoDescription=Software para la gestión de colecciones
VersionInfoTextVersion=Numisoftware 1.0
ShowUndisplayableLanguages=true

[Languages]
Name: en; MessagesFile: compiler:Languages\English.isl; LicenseFile: C:\Numisoftware\Programa\Licencias\LicenseIN.rtf
Name: es; MessagesFile: compiler:Languages\Spanish.isl; LicenseFile: C:\Numisoftware\Programa\Licencias\LicenciaES.rtf
Name: catalan; MessagesFile: compiler:Languages\Catalan.isl; LicenseFile: C:\Numisoftware\Programa\Licencias\LlicènciaCAT.rt f
Name: french; MessagesFile: compiler:Languages\French.isl; LicenseFile: C:\Numisoftware\Programa\Licencias\LicenceFR.rtf
Name: german; MessagesFile: compiler:Languages\German.isl; LicenseFile: C:\Numisoftware\Programa\Licencias\LizenzDE.rtf
Name: portuguese; MessagesFile: compiler:Languages\Portuguese.isl; LicenseFile: C:\Numisoftware\Programa\Licencias\LicençaPO.rtf
Name: italian; MessagesFile: compiler:Languages\Italian.isl; LicenseFile: C:\Numisoftware\Programa\Licencias\LicenzaIT.rtf


[Files]
;Source: C:\Numisoftware\Programa\Numisoftware.mde; DestDir: {app}; Flags: ignoreversion
Source: C:\Numisoftware\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
Source: C:\Numisoftware\Programa\Iconos\numisoftware.ico; DestDir: {app}\Programa\Iconos; Flags: ignoreversion recursesubdirs createallsubdirs
Source: C:\Numisoftware\Programa\Referencias\Dao360.dll; DestDir: {sys}; Flags: sharedfile restartreplace regserver noregerror
Source: C:\Numisoftware\Programa\Referencias\FM20.dll; DestDir: {sys}; Flags: sharedfile restartreplace regserver noregerror
Source: C:\Numisoftware\Programa\Referencias\MSO.DLL; DestDir: {sys}; Flags: sharedfile restartreplace regserver noregerror
Source: C:\Numisoftware\Programa\Referencias\msado21.tlb; DestDir: {sys}; Flags: sharedfile restartreplace regtypelib noregerror
Source: C:\Numisoftware\Programa\Referencias\stdole2.tlb; DestDir: {sys}; Flags: sharedfile restartreplace regtypelib noregerror
Source: C:\Numisoftware\Programa\Dlls\MouseWheelVScroll.dl l; DestDir: {sys}; Flags: sharedfile restartreplace regserver noregerror
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: {group}\Numisoftware; Filename: {app}\Programa\Numisoftware.mde; WorkingDir: {app}; IconFilename: {app}\Programa\Iconos\numisoftware.ico; IconIndex: 0
Name: {userdesktop}\Numisoftware; Filename: {app}\Programa\Numisoftware.mde; WorkingDir: {app}; IconFilename: {app}\Programa\Iconos\numisoftware.ico; IconIndex: 0
Name: {group}\{cm:UninstallProgram,Numisoftware}; Filename: {uninstallexe}; WorkingDir: {app}; IconFilename: {app}\Programa\Iconos\numisoftware.ico; IconIndex: 0

[Run]
Filename: {app}\Programa\Scripts\SeguridadAccess2003.vbs; Check: fVersion('0010'); Flags: shellexec; Parameters: 1
Filename: {app}\Programa\Scripts\cc2010.exe; Check: fVersion('0001') or fVersion('0101'); Parameters: /cn C:\Numisoftware Description: {cm:LaunchProgram,cc2010}; Flags: waituntilterminated
;Filename: {app}\Programa\Scripts\cc2010.exe; Check: fVersion('0101'); Parameters: /cn C:\Numisoftware Description: {cm:LaunchProgram,cc2010}; Flags: waituntilterminated

Código:

function fVersionAccess(): Byte;
var
localAccess : String;
loaded: String;
begin
Result := 0;
RegQueryStringValue( HKLM,'Software\Microsoft\Windows\CurrentVersion\Ap p Paths\Msaccess.exe','path',loaded );
RegQueryStringValue( HKLM,'Software\Microsoft\Office\9.0\Access\Install Root','Path',localAccess );
if fileexists(localAccess + '\MsAccess.exe') then
if localAccess = loaded then
Result:=1; //Access 2000
localAccess := '';
RegQueryStringValue( HKLM,'Software\Microsoft\Office\10.0\Access\Instal lRoot','Path',localAccess );
if fileexists(localAccess + '\MsAccess.exe') then
if localAccess = loaded then
Result := 2; //Access 2002
localAccess := '';
RegQueryStringValue( HKLM,'Software\Microsoft\Office\11.0\Access\Instal lRoot','Path',localAccess );
if fileexists(localAccess + '\MsAccess.exe') then
if localAccess = loaded then
Result := 3; //Access 2003
localAccess := '';
RegQueryStringValue( HKLM,'Software\Microsoft\Office\12.0\Access\Instal lRoot','Path',localAccess );
if fileexists(localAccess + '\MsAccess.exe') then
if localAccess = loaded then
Result := 4; //Access 2007
localAccess := '';
RegQueryStringValue( HKLM,'Software\Microsoft\Office\14.0\Access\Instal lRoot','Path',localAccess );
if fileexists(localAccess + '\MsAccess.exe') then
if localAccess = loaded then
Result := 5; //Access 2010
end;


function fversion(version: String): Boolean;
begin
result:=false;
Case version of
'1110': begin
if not fVersionAccess()=4 then // Si no tiene Access 2007
result:=true;
end;
'0011': begin
if not fVersionAccess()=5 then // Si no tiene Access 2010
result:=true;
end;
'1100': begin
if not fVersionAccess()=3 then // Si no tiene Access 2003
result:=true;
end;
'0001': begin
if fVersionAccess()=4 then //Access 2007
result:=true;
end;
'0010': begin
if fVersionAccess()=3 then //Access 2003
result:=true;
end;
'0101': begin
if fVersionAccess()=5 then //Access 2010
result:=true;
end;
end;
end;

function IsAccessRuntimeInstalled(): Boolean;
begin
Result := RegKeyExists (HKLM, 'SOFTWARE\Microsoft\Office\14.0\Registration\{9012 0000-001C-0C0A-0000-0000000FF1CE}');
end;


Saludos, ximo


Título: Re: Que estoy haciendo mal
Publicado por: Eleкtro en 5 Febrero 2013, 23:19 pm
1.
Código:
DefaultDirName=C:\

Tu instalador sólo funcionará en equipos que dispongan de la unidad C:\, debes usar la constante adecuada:
Código:
DefaultDirName={sd}

2.
Código:
Source: C:\Numisoftware\Programa\Numisoftware.mde; DestDir: {app}; Flags: ignoreversion

Estás indicando en el directorio de destino la ruta "C:\":
{app} = DefaultDirName = C:\

Entonces haz esto:
Código:
Source: C:\Numisoftware\Programa\Numisoftware.mde; DestDir: {app}\Programa\; Flags: ignoreversion

Y eso equivaldría a:
Código:
C:\Programa\Numisoftware.mde

Saludos


Título: Re: [INNO Setup] Que estoy haciendo mal
Publicado por: rusco en 5 Febrero 2013, 23:39 pm
Hola,

Gracias Elektro, solo con un par de modificaciones a sido suficiente, solo una duda, como dices que un pc puede no tener Unidad C:\, se que las letras se pueden cambiar pero sería nefasto para mi que C no estubiese en la pc que se instale, no por el instalador que es lo de menos, si no por la propia aplicación que apunta a C:\ y así se donde esta cada cosa, de lo contrario tendría que cambiar esto y meterlo en un archivo *.ini.

Bueno esta son las modificaciones hechas.

DefaultDirName=C:\Numisoftware

Source: C:\Numisoftware\Programa\Numisoftware.mde; DestDir: {app}\Programa\; Flags: ignoreversion


Lo dicho muchas gracias, saludos.
ximo


Título: Re: [INNO Setup] Que estoy haciendo mal
Publicado por: Eleкtro en 5 Febrero 2013, 23:57 pm
La letra de unidad se puede modificar muy fácilmente, y "C:\" no tiene porque ser siempre la unidad principal, en muchos casos es "D:\", y si tu APP depende de rutas del sistema, pues... bueno, irá en el 99,9% de PC's, eso también te lo digo xD.

Espero que no te ofendas pero sincéramente eso de desarrollar una aplicación utilizando "C:\" (o cualquier otra ruta absoluta del sistema) para cosas importantes en lugar de usar la variable que contiene el valor de la letra del disco duro (o de la ruta absoluta del sistema) lo véo muy mala práctica e ineficáz,
usa las variables de Windows, que para algo están. :P

PD: Me alegra haberte podido ayduar.

Un saludo.