elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Crear instalador con DVD check?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Crear instalador con DVD check?  (Leído 2,470 veces)
BerScott

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Crear instalador con DVD check?
« en: 2 Enero 2015, 23:14 pm »

Hola a todos.

Estoy intentando buscar respuesta para esto desde hace ocho meses. En un intento desesperado estoy registrándome en varios foros de programación y derivados a ver si alguien puede despejarme esta duda. No he encontrado un foro mas específico para esto, así que espero que este planteando la duda en la sección correcta.

Llevo como ocho meses intentando documentarme para poder crear un instalador para Windows, salvo con la excepción de que este requiere comprobar si en la bandeja del lector hay un disco insertado, en concreto el de un juego, ya que soy modder y por circunstancias varias necesito que el instalador reconozca el disco original para continuar instalando los archivos.

La operación en si es sencilla, si el disco es el correcto el instalador continua y vuelca los archivos en las carpetas correspondientes, si no es el disco correcto el instalador preguntará si quieres volver a intentarlo o salir del instalador.

Por ahora lo he intentado con InstallShield 2010 Premiere y con Inno Setup Compiler, pero no doy con la tecla. En los foros oficiales no me ha respondido absolutamente nadie y gente que ha creado algo por el estilo tampoco contestan a emails/contactos por foro.

A titulo informativo: no tengo apenas conocimientos en programación, solo algo de scripting para algunos programas concretos.

Esto ya es desesperado. Agradecería infinitamente que alguien arrojara algo de luz.

Un saludo.


En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
Re: Crear instalador con DVD check?
« Respuesta #1 en: 3 Enero 2015, 07:58 am »

En ambos podrías hacerlo, MSI soporta VisualBasic Scripting, e IS soporta Pascal Scripting, ahora, yo no manejo MSI (aunque si manejo VBS, pero desconozco como implementarlo usando la sintaxis de MSI).

Se me ocurren dos formas, una sería comprobando la etiqueta del disco ...en caso de que el cd llevase una etiqueta igual para cada copia del juego,
y otra forma sería verificando la existencia de un archivo crítico dentro del disco (juego.exe) ...y a raíz de esto puedes hacer también un análisis del checksum/hash (CRC32/MD5) para mayor fiabilidad, o las cosas que quieras.

Ejemplo:

Código
  1. [Setup]
  2. AppName=My Program
  3. AppVersion=1.0
  4. DefaultDirName={pf}\My Program
  5.  
  6. [Code]
  7.  
  8. type
  9.  TDriveType = (
  10.    dtUnknown,
  11.    dtNoRootDir,
  12.    dtRemovable,
  13.    dtFixed,
  14.    dtRemote,
  15.    dtCDROM,
  16.    dtRAMDisk
  17.  );
  18.  
  19.  TDriveTypes = set of TDriveType;
  20.  
  21.  // Las funciones las declaré en modo ANSI.
  22.  
  23.  function GetDriveType(lpRootPathName: string): UINT;
  24.  external 'GetDriveTypeA@kernel32.dll stdcall';
  25.  
  26.  function GetLogicalDriveStrings(nBufferLength: DWORD; lpBuffer: string): DWORD;
  27.  external 'GetLogicalDriveStringsA@kernel32.dll stdcall';
  28.  
  29. function IntToDriveType(Value: UINT): TDriveType;
  30. begin
  31.  Result := dtUnknown;
  32.  case Value of
  33.    1: Result := dtNoRootDir;
  34.    2: Result := dtRemovable;
  35.    3: Result := dtFixed;
  36.    4: Result := dtRemote;
  37.    5: Result := dtCDROM;
  38.    6: Result := dtRAMDisk;
  39.  end;
  40. end;
  41.  
  42. function GetLogicalDrives(var ADrives: array of string; AFilter: TDriveTypes): Integer;
  43. var
  44.  S: string;
  45.  I: Integer;
  46.  DriveRoot: string;
  47. begin
  48.  Result := 0;
  49.  SetArrayLength(ADrives, 0);
  50.  
  51.  I := GetLogicalDriveStrings(0, #0);
  52.  if I > 0 then
  53.  begin
  54.    SetLength(S, I);
  55.    if GetLogicalDriveStrings(Length(S), S) > 0 then
  56.    begin
  57.      S := TrimRight(S);
  58.      I := Pos(#0, S);
  59.      while I > 0 do
  60.      begin
  61.        DriveRoot := Copy(S, 1, I - 1);
  62.        if (AFilter = []) or
  63.          (IntToDriveType(GetDriveType(DriveRoot)) in AFilter) then
  64.        begin
  65.          SetArrayLength(ADrives, GetArrayLength(ADrives) + 1);
  66.          ADrives[GetArrayLength(ADrives) - 1] := DriveRoot;
  67.        end;
  68.        Delete(S, 1, I);
  69.        I := Pos(#0, S);
  70.      end;
  71.      Result := GetArrayLength(ADrives);
  72.    end;
  73.  end;
  74. end;
  75.  
  76.  
  77. function CheckForFile(Filename: string; DriveType: TDriveTypes): Boolean;
  78. var
  79.  I: Integer;
  80.  DriveCount: Integer;
  81.  DriveArray: array of string;
  82.  
  83. begin
  84.  DriveCount := GetLogicalDrives(DriveArray, DriveType);
  85.  for I := 0 to DriveCount - 1 do
  86.    begin
  87. if FileExists(DriveArray[I] + Filename) then
  88.    begin
  89. // MsgBox('File was found on path: ' + DriveArray[I] + Filename, mbInformation, MB_OK);
  90. Result := True;
  91. Break;
  92. end;
  93. end;
  94. end;
  95.  
  96. function InitializeSetup: Boolean;
  97. begin
  98.  Result := CheckForFile('bin\game.exe', [dtCDROM])
  99.  if Not Result then
  100. begin
  101. MsgBox('File does not exist on any CD-ROM drive, install stops', mbCriticalError, MB_OK);
  102. end;
  103. end;

Saludos[/code]


« Última modificación: 3 Enero 2015, 08:02 am por Eleкtro » En línea



BerScott

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Crear instalador con DVD check?
« Respuesta #2 en: 3 Enero 2015, 22:58 pm »

Muchas gracias, de verdad. Esto entonces debería servir para Inno Setup.

Ire haciendo pruebas con ese codigo y a ver que tal  :)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
crear un instalador
Multimedia
briangarcia 0 1,609 Último mensaje 24 Febrero 2006, 16:38 pm
por briangarcia
Crear instalador sin dependencia
Programación Visual Basic
karmany 7 3,552 Último mensaje 29 Octubre 2006, 13:10 pm
por karmany
Crear un instalador?
Software
x64core 5 3,282 Último mensaje 24 Marzo 2012, 16:08 pm
por BKAR
setup factory 9.1 (check box. radio check) ¿?
Programación Visual Basic
stifmstr 2 4,323 Último mensaje 5 Diciembre 2013, 21:25 pm
por stifmstr
Crear un instalador junto con la DB
Java
xXMikiXx 0 1,361 Último mensaje 20 Diciembre 2015, 15:47 pm
por xXMikiXx
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines