Montar Imagenes con Daemon Tools desde AMS

Aquí puedes preguntar o compartir tus dudas y conocimientos acerca del programa
hola a todos

Tengo en mente hacer un proyecto en AMS con juegos infantiles para mi hija de 5 años.

El problema que me surge es que para poder jugarlos se necesita tener el CD en la unidad lectora, quiero tener todos en un DVD, de ahí se pueden instalar pero no jugar, así que pensé ponerlos en imagen ISO y montarlos con Daemon Tools. De esta manera se podrán instalar y jugarlos si los montas en la unidad virtual.

Estoy utilizando este script para montar la imagen.

Código: Seleccionar todo

File.Run("C:\\Archivos de programa\\DAEMON Tools Lite\\DTLite.exe", '-mount 0, "Autoplay\\Docs\\BARBIE.iso"', "", SW_SHOWNORMAL, false);
Y este para desmontar la imagen

Código: Seleccionar todo

File.Run("C:\\Archivos de programa\\DAEMON Tools Lite\\DTLite.exe", '-unmount 0', "", SW_SHOWNORMAL, false);
Hasta ahí no he tenido ningún problema, pero mi duda y no se como hacerlo, es si Daemon Tools no esta instalado en la ruta predeterminada que he indicado, saldrá algún error o simplemente no se montaría la imagen y el botón será inservible.

Me gustaría algún script que primero me indicara si Daemon Tools esta instalado en el sistema, si no esta que me diera la opción de instalarlo y que se pudiera mandar la opción de montar imagen aunque no este Daemon Tools instalado en la ruta predeterminada, no se si esto sea posible realizarlo.

Muchas gracias por la ayuda
Si el programa siempre se instala ahí puedes hacer algo como:
if File.DoesExist("C:\\Archivos de programa\\DAEMON Tools Lite\\DTLite.exe") then
--Aqui continua tu script.
else
--Pones algo aqui de que no se encontró
end
El detalle es que en muchos SO la ruta es C:\\Program Files en lugar de archivos de programa jejeje
Muchísimas gracias webultra, pero te soy sincero no tengo ni la menor idea de que script o que poner pues no se nada de la programación de AMS.

El script aunque ponga Archivos de programa, lo ejecuto en Windows 7 que tiene la ruta Program Files lo ejecuta sin problemas. Las pruebas las he realizado tanto en XP, Vista y 7 y no hay problema siempre y cuando la ruta de instalación sea la predeterminada.

Así que mi duda persiste:
Me gustaría algún script que primero me indicara si Daemon Tools esta instalado en el sistema, si no esta que me diera la opción de instalarlo y que se pudiera mandar la opción de montar imagen aunque no este Daemon Tools instalado en la ruta predeterminada, no se si esto sea posible realizarlo.
Ojala me puedan ayudar y nuevamente les reitero mis agradecimientos.
webultra escribió:
El detalle es que en muchos SO la ruta es C:\\Program Files en lugar de archivos de programa jejeje
Pero.. existe la global variable _ProgramFilesFolder , con esto esta solucionado o casi solucionado , puede fallar en algunos SO de 64bts , porque disponen de Program Files(x86) y Progam Files a secas y segun el programa se instala en uno u en otro , aunque no es el caso de Daemon.

Yo utilizaria :
if File.DoesExist(_ProgramFilesFolder.."\\DAEMON Tools Lite\\DTLite.exe") then
--Aqui continua tu script.
else
--Pones algo aqui de que no se encontró
end
Referente a que no este instalado el DT , yo haria un require o la búsqueda de antes y si no esta darle enlace a la pagina de DT al usuario que lo baje e instale para continuar , porque hacerlo sin tenerlo en el sistema lo veo xungo , DT necesita de unidades virtuales, no se si esto sera facil a modo portable.

Esto es lo que yo haria a modo sencillo...

On StartUp:
local found = File.DoesExist(_ProgramFilesFolder .. "\\DAEMON Tools Lite\\DTLite.exe");
if not found then
	local msg = Dialog.Message("Daemon Tools","Daemon Tools Lite no se encuentra en la ruta\r\npredeterminada en tu sistema , es necesario\r\npara utilizar algunos recursos del programa.\r\n\r\n¿Deseas instalarlo ahora?", MB_OKCANCEL, MB_ICONINFORMATION, MB_DEFBUTTON1);
		if (msg == IDOK) then		
			File.OpenURL("http://www.daemon-tools.cc/eng/products/dtLite", SW_SHOWNORMAL);
			error = Application.GetLastError();
			if (error ~= 0) then
				Dialog.Message("Error", _tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION);
			end
		else
		Dialog.TimedMessage("Cancelado...", "Cerrando Aplicación...", 2000, MB_ICONINFORMATION);
		Application.Exit(0);
	end
end
Por otro lado tambien podrias hacer un Detect plugin de AMS para Daemon Tools.
¡Gracias rafaxplayer!

He puesto el script que amablemente has puesto y lo he probado en 2 máquinas virtuales (XP y Vista) donde no tienen instalado el Daemon Tools y funciona la opción perfecto.

Quiero comentarte que estuve buscando el Daemon Tools en portable pero al parecer tiene problemas, asi que la mejor opción es instalarlo de manera normal. ¿Podrías indicarme por favor como cambiar el script para que en lugar de darme la opción de llevarme a la web de Daemon Tools me de la opción de instalarlo desde el proyecto? Imagen

Por último...
Por otro lado tambien podrias hacer un Detect plugin de AMS para Daemon Tools.
¿Podrías explicarme que es exactamente lo que hace el Detect plugin?

Gracias por la paciencia y el tiempo que inviertes en resolver a otros sus dudas.
Para instalarlo solo tienes que cambiar:

Código: Seleccionar todo

File.OpenURL("http://www.daemon-tools.cc/eng/products/dtLite", SW_SHOWNORMAL);
Por :
File.Run("AutoPlay\\Docs\\DTLite.exe", "", "AutoPlay\\Docs", SW_SHOWNORMAL, false);
	error = Application.GetLastError();
		if (error ~= 0) then
			Dialog.Message("Error", _tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION);
		end
Suponiendo que el intsalador se llame DTLite.exe y se encuentre en Docs.

Los detect plugin como su nombre indica son para detectar si hay algún recurso o programa necesario en el sistema , pueden realizar acciones según este configurado , bajar archivo , acceso a la web de descarga , etc...
tanto un detect como un simple filtro de búsqueda te pueden valer, la cuestión es que detecte si esta o no en el sistema, yo te recomiendo un detect por que así puedes publicarlo para la gente. aun que quizás un simple filtro de búsqueda sea mas fácil...

:friends:
Ceone escribió:tanto un detect como un simple filtro de búsqueda te pueden valer, la cuestión es que detecte si esta o no en el sistema, yo te recomiendo un detect por que así puedes publicarlo para la gente. aun que quizás un simple filtro de búsqueda sea mas fácil...

:friends:
Hola Ceone, ¿podrías indicarme como hacer el detect o el filtro de búsqueda?

¿Qué diferencia habría entre el script que me ha proporcionado amablemente rafaxplayer?

Muchas gracias, de verdad que el foro hacen que sea genial
Ceone publico material al respecto aqui.
Ya descargue el Dependencies Compiler de Ceone, pero la verdad no entiendo como utilizarlo, leí el manual que viene incluido, pero no me aclaro como podría hacer el plugin para detectar Daemon Tools.

Como le mencionaba soy totalmente novato y no se absolutamente nada de programación lo que he armado es con base a ejemplos y acciones muy simples, me apena mucho no aclararme con facilidad.

Confirmando lo que Ceone comento anteriormente, si que me gustaría compartir con la gente este proyecto, pero me gustaría que quedara lo mejor posible.

Gracias nuevamente por su ayuda y tiempo.
He editado el enlace de rafa para que te mande al post actualizado dentro de este foro.

EL enlace correcto es: http://www.amsspecialist.info/viewtopic.php?f=16&t=13

Bueno amigo ThunderBolt, todo viene dado por el nivel que tengas de AMS o/y LUA, hacer un filtro es tan facil como hacer que busque determinado archivo o linea en el registro para saber si "X" programa esta instalado.

Por ejemplo en el caso de "Daemon Tools Lite 4.35.6"
(si usas otra versión comprueba antes que todos los parámetros funcionan correctamente)
He mirado en el registro y me he dado cuenta que en la sección de software al instalarlo queda marcado así que un posible filtro es por el registro, la seccion es:
HKEY_CURRENT_USER\Software\DT Soft\DAEMON Tools Pro


lamentablemente he buscado en el registro si deja constancia de su ubicación en el disco duro pero no la deja así que lo mejor es hacerlo por medio de un comando "Find".
function FindCallBack(CurrentFolder)
    StatusDlg.ShowCancelButton(true, "Cancel");
    StatusDlg.SetTitle("Searching . . . ");
    StatusDlg.SetMessage("Please wait.     Search is in progress.");
    StatusDlg.SetStatusText("Current Folder: " .. CurrentFolder);
    cancel = StatusDlg.IsCancelled();
    if cancel then
        return false;
    else
        return true;
    end
end

StatusDlg.Show(0, false);
PROGRAMFILES = Shell.GetFolder(SHF_PROGRAMFILES);
Resultados_de_la_busqueda = Folder.Find(PROGRAMFILES, "DAEMON*", false, FindCallBack);
error = Application.GetLastError();
StatusDlg.Hide();

if error ~= 0 then
	StatusDlg.Hide();
    Dialog.Message("Error",_tblErrorMessages[error]);
else
    if (Resultados_de_la_busqueda == nil) then
   		Dialog.TimedMessage("Información...", "No se a podido localizar el directorio de DAEMON Tools Lite.\r\nVamos a proceder a la búsqueda del programa por el nombre del archivo, esta operación puede tardar varios minutos.", 2000, MB_ICONINFORMATION);
   		resultado_FINAL = File.Find(PROGRAMFILES, "DTLite.exe", false, false, nil, nil);
   		error = Application.GetLastError();
		if error ~= 0 then
		    Dialog.Message("Error",_tblErrorMessages[error]);
		else
			if (resultado_FINAL == nil) then
				Dialog.Message("Información", "No se a podido localizar el directorio de DAEMON Tools Lite.")
			else
				Variable_Aqui = resultado_FINAL[1]
				--Dialog.Message("", resultado_FINAL[1]);
				-- Aqui pon lo que quieras...
			end
		end
	else
   		resultado_FINAL = File.Find(Resultados_de_la_busqueda[1], "DTLite.exe", false, false, nil, nil);
   		error = Application.GetLastError();
		if error ~= 0 then
		    Dialog.Message("Error",_tblErrorMessages[error]);
		else
			Variable_Aqui = resultado_FINAL[1]
			--Dialog.Message("", resultado_FINAL[1]);
			-- Aqui pon lo que quieras...
		end
    end
end
Quizás podría ha verlo echo un poco mas simple pero me a salido así. lo he probado poco... lógicamente donde pone "-- Aquí pon lo que quieras..." ay tienes que poner el script que tu desees yo para hacer este me he basado en el ejemplo que viene en la ayuda del AMS 8, como te digo se puede hacer mas fácil o mas difícil... va a gustos...

y para hacer un depende tienes que hacer que mire la versión del archivo y algunas cosillas mas pero creo que no esta en tu mano... "por así decirlo".

Espero que te sea de gran utilidad ya me diras las dudas.
Un saludo Ceone :pc: :pc: :pc:
Dependencies Compiler 1.0.

Imagen

estoy usando la version AutoPlay Media Studio 8 Personal Edition es ese el problema ????
erickdj escribió:Dependencies Compiler 1.0.

Imagen

estoy usando la version AutoPlay Media Studio 8 Personal Edition es ese el problema ????
que me quieres decir con esa imagen?? por que dudo mucho que esa aplicación la allá compilado con una versión trial, pero bueno todo es mirarlo.

expón tu problema. :friends:
Dependencies Compiler 1.0.AL MOMENTO DE INTALARLO LO PRIMERO QUE SALE ES LO QUE APARECE EN LA IMAGEN
Antes de todo quiero pedir una disculpa a Ceone, pues en su momento no pude darle las gracias por el ultimo script que amablemente me proporciono, la verdad me he mudado de casa y trabajo y hasta el día de hoy ya bien instalado y con el tiempo he vuelto a conectar.

Amigo, el script que has puesto simplemente me ha funcionado de maravilla.

Lo he puesto en el boton que utilizo para montar la imagen ISO, lo he probado en Windows XP SP3, Windows Vista SP2, Windows 7 SP1 y Windows 7 SP1 64 Bits donde la carpeta de instalación del Daemon cambia a la de Archivos de programa (x86) y ¡funciona perfectamente!

En la segunda instancia donde me indicas

-- Aqui pon lo que quieras...

Puse el siguiente script para montar la imagen ISO
 Nombre = Button.GetText("Button1");
if Nombre == "Montar ISO" then
result = File.Run(_ProgramFilesFolder .. "\\DAEMON Tools Lite\\DTLite.exe", '-mount 0, "Autoplay\\Docs\\Prueba.iso"', "", SW_SHOWNORMAL, false);
Button.SetText("Button1", "Desmontar ISO");
else
Button.SetText("Button1", "Montar ISO");
result = File.Run(_ProgramFilesFolder .. "\\DAEMON Tools Lite\\DTLite.exe", '-unmount 0', "", SW_SHOWNORMAL, false);
end
Con esto monta la imagen perfecto en cualquiera de los SOS antes mencionados.

Ahora tengo la siguiente duda, cuando Daemon Tools no esta instalado en el sistema me salen los siguientes mensajes.

Imagen

Imagen

Al darle aceptar pues ya no pasa nada, que es la primera instancia donde me indicas:

-- Aqui pon lo que quieras...

En ese punto he tratado de poner lo que Rafaxplayer amablemente me ayudo, con la variación que tú me indicaste, para que si no estaba instalado el Daemon Tools procediera a la instalación del mismo.
local found = File.DoesExist(_ProgramFilesFolder .. "\\DAEMON Tools Lite\\DTLite.exe");
if not found then
        local msg = Dialog.Message("Daemon Tools","Daemon Tools Lite no se encuentra en la ruta\r\npredeterminada en tu sistema , es necesario\r\npara utilizar algunos recursos del programa.\r\n\r\n¿Deseas instalarlo ahora?", MB_OKCANCEL, MB_ICONINFORMATION, MB_DEFBUTTON1);
                if (msg == IDOK) then          
                        File.Run("AutoPlay\\Docs\\DTLite.exe", "", "AutoPlay\\Docs", SW_SHOWNORMAL, false);
        error = Application.GetLastError();
                if (error ~= 0) then
                        Dialog.Message("Error", _tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION);
                end
                        error = Application.GetLastError();
                        if (error ~= 0) then
                                Dialog.Message("Error", _tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION);
                        end
                else
                Dialog.TimedMessage("Cancelado...", "Cerrando Aplicación...", 2000, MB_ICONINFORMATION);
                Application.Exit(0);
        end
end
¿Podrías ayudarme porfavor para poner el script correcto para que después de la segunda imagen si no se encontro Daemon Tools, proceda a la instalación del programa? o bien si no se acepta la instalación que un mensaje diga que la función de montaje de las ISOs no funcionará.

De antemano MUCHAS GRACIAS y disculpa las molestias.
El segundo mensaje completalo con este script , haber si va bien.
local msg = Dialog.Message("Daemon Tools","No hemos podido localizar el directorio de Daemon Tools\r\n¿Deseas instalarlo en tu sistema?", MB_OKCANCEL, MB_ICONINFORMATION, MB_DEFBUTTON1);
    if (msg == IDOK) then          
        File.Run("AutoPlay\\Docs\\DTLite.exe", "", "AutoPlay\\Docs", SW_SHOWNORMAL, false);
        	error = Application.GetLastError();
             if (error ~= 0) then
                  Dialog.Message("Error", _tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION);
             end
                        
     else
      Dialog.TimedMessage("Cancelado...", "Recuerda que no tendras disponible la funcion de montar imagen\r\nCerrando Aplicación...",3000, MB_ICONINFORMATION, MB_DEFBUTTON1);
      Application.Exit(0);
     end
end
¡Muchas gracias por la pronta respuesta Rafaxplayer!

He puesto el código y me manda el siguiente error

Imagen


El código completo lo estoy poniendo de la siguiente manera
function FindCallBack(CurrentFolder)
    StatusDlg.ShowCancelButton(true, "Cancel");
    StatusDlg.SetTitle("Searching . . . ");
    StatusDlg.SetMessage("Please wait.     Search is in progress.");
    StatusDlg.SetStatusText("Current Folder: " .. CurrentFolder);
    cancel = StatusDlg.IsCancelled();
    if cancel then
        return false;
    else
        return true;
    end
end

StatusDlg.Show(0, false);
PROGRAMFILES = Shell.GetFolder(SHF_PROGRAMFILES);
Resultados_de_la_busqueda = Folder.Find(PROGRAMFILES, "DAEMON*", false, FindCallBack);
error = Application.GetLastError();
StatusDlg.Hide();

if error ~= 0 then
        StatusDlg.Hide();
    Dialog.Message("Error",_tblErrorMessages[error]);
else
    if (Resultados_de_la_busqueda == nil) then
                Dialog.TimedMessage("Información...", "No se a podido localizar el directorio de DAEMON Tools Lite.\r\nVamos a proceder a la búsqueda del programa por el nombre del archivo, esta operación puede tardar varios minutos.", 2000, MB_ICONINFORMATION);
                resultado_FINAL = File.Find(PROGRAMFILES, "DTLite.exe", false, false, nil, nil);
                error = Application.GetLastError();
                if error ~= 0 then
                    Dialog.Message("Error",_tblErrorMessages[error]);
                else
                        if (resultado_FINAL == nil) then
                                Dialog.Message("Información", "No se a podido localizar el directorio de DAEMON Tools Lite.")
                        else
                                Variable_Aqui = resultado_FINAL[1]
                                --Dialog.Message("", resultado_FINAL[1]);
                                -- Aqui pon lo que quieras...
                                

                                local msg = Dialog.Message("Daemon Tools","No hemos podido localizar el directorio de Daemon Tools\r\n¿Deseas instalarlo en tu sistema?", MB_OKCANCEL, MB_ICONINFORMATION, MB_DEFBUTTON1);
    if (msg == IDOK) then          
        File.Run("AutoPlay\\Docs\\DTLite.exe", "", "AutoPlay\\Docs", SW_SHOWNORMAL, false);
                error = Application.GetLastError();
             if (error ~= 0) then
                  Dialog.Message("Error", _tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION);
             end
                       
     else
      Dialog.TimedMessage("Cancelado...", "Recuerda que no tendras disponible la funcion de montar imagen\r\nCerrando Aplicación...",3000, MB_ICONINFORMATION, MB_DEFBUTTON1);
      Application.Exit(0);
     end
end
                                
              
                end
                end

        else
                resultado_FINAL = File.Find(Resultados_de_la_busqueda[1], "DTLite.exe", false, false, nil, nil);
                error = Application.GetLastError();
                if error ~= 0 then
                    Dialog.Message("Error",_tblErrorMessages[error]);
                else
                        Variable_Aqui = resultado_FINAL[1]
                        --Dialog.Message("", resultado_FINAL[1]);
                        -- Aqui pon lo que quieras...
                        
                        Nombre = Button.GetText("Button1");
if Nombre == "Montar ISO" then
result = File.Run(_ProgramFilesFolder .. "\\DAEMON Tools Lite\\DTLite.exe", '-mount 0, "Autoplay\\Docs\\FunPhoto.iso"', "", SW_SHOWNORMAL, false);
Button.SetText("Button1", "Desmontar ISO");
else
Button.SetText("Button1", "Montar ISO");
result = File.Run(_ProgramFilesFolder .. "\\DAEMON Tools Lite\\DTLite.exe", '-unmount 0', "", SW_SHOWNORMAL, false);
end
                end
    end
end
Ahi me quedo atorado...de verdad nuevamente muchas gracias.
No añadi las 2 lineas anteriores del script que me diste Rafaxplayer....

Las he añadido y ya no manda el mensaje de error, pero no manda la acción para instalar el Daemon Tools.

Es asi como ha quedado el script
function FindCallBack(CurrentFolder)
    StatusDlg.ShowCancelButton(true, "Cancel");
    StatusDlg.SetTitle("Searching . . . ");
    StatusDlg.SetMessage("Please wait.     Search is in progress.");
    StatusDlg.SetStatusText("Current Folder: " .. CurrentFolder);
    cancel = StatusDlg.IsCancelled();
    if cancel then
        return false;
    else
        return true;
    end
end

StatusDlg.Show(0, false);
PROGRAMFILES = Shell.GetFolder(SHF_PROGRAMFILES);
Resultados_de_la_busqueda = Folder.Find(PROGRAMFILES, "DAEMON*", false, FindCallBack);
error = Application.GetLastError();
StatusDlg.Hide();

if error ~= 0 then
        StatusDlg.Hide();
    Dialog.Message("Error",_tblErrorMessages[error]);
else
    if (Resultados_de_la_busqueda == nil) then
                Dialog.TimedMessage("Información...", "No se a podido localizar el directorio de DAEMON Tools Lite.\r\nVamos a proceder a la búsqueda del programa por el nombre del archivo, esta operación puede tardar varios minutos.", 2000, MB_ICONINFORMATION);
                resultado_FINAL = File.Find(PROGRAMFILES, "DTLite.exe", false, false, nil, nil);
                error = Application.GetLastError();
                if error ~= 0 then
                    Dialog.Message("Error",_tblErrorMessages[error]);
                else
                        if (resultado_FINAL == nil) then
                                Dialog.Message("Información", "No se a podido localizar el directorio de DAEMON Tools Lite.")
                        else
                                Variable_Aqui = resultado_FINAL[1]
                                --Dialog.Message("", resultado_FINAL[1]);
                                -- Aqui pon lo que quieras...
                                
                         local found = File.DoesExist(_ProgramFilesFolder .. "\\DAEMON Tools Lite\\DTLite.exe");
if not found then
local msg = Dialog.Message("Daemon Tools","No hemos podido localizar el directorio de Daemon Tools\r\n¿Deseas instalarlo en tu sistema?", MB_OKCANCEL, MB_ICONINFORMATION, MB_DEFBUTTON1);
    if (msg == IDOK) then          
        File.Run("AutoPlay\\Docs\\DTLite.exe", "", "AutoPlay\\Docs", SW_SHOWNORMAL, false);
                error = Application.GetLastError();
             if (error ~= 0) then
                  Dialog.Message("Error", _tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION);
             end
                       
     else
      Dialog.TimedMessage("Cancelado...", "Recuerda que no tendras disponible la funcion de montar imagen\r\nCerrando Aplicación...",3000, MB_ICONINFORMATION, MB_DEFBUTTON1);
      Application.Exit(0);
     end
end       
                                
                end
                end

        else
                resultado_FINAL = File.Find(Resultados_de_la_busqueda[1], "DTLite.exe", false, false, nil, nil);
                error = Application.GetLastError();
                if error ~= 0 then
                    Dialog.Message("Error",_tblErrorMessages[error]);
                else
                        Variable_Aqui = resultado_FINAL[1]
                        --Dialog.Message("", resultado_FINAL[1]);
                        -- Aqui pon lo que quieras...
                        
                        Nombre = Button.GetText("Button1");
if Nombre == "Montar ISO" then
result = File.Run(_ProgramFilesFolder .. "\\DAEMON Tools Lite\\DTLite.exe", '-mount 0, "Autoplay\\Docs\\FunPhoto.iso"', "", SW_SHOWNORMAL, false);
Button.SetText("Button1", "Desmontar ISO");
else
Button.SetText("Button1", "Montar ISO");
result = File.Run(_ProgramFilesFolder .. "\\DAEMON Tools Lite\\DTLite.exe", '-unmount 0', "", SW_SHOWNORMAL, false);
end
                end
    end
end

¿podrían auxiliarme?

Desde ya MUCHAS GRACIAS
Bueno aquí te dejo el script como yo lo haría , aunque habría que adaptarlo a tu proyecto para que fuera bien seguro .

Yo he eliminado el callback porque estas búsquedas son tan cortas que ni se aprecian los statusdlg ( pero eso tu mismo...).
Por otra parte pienso que la busqueda del ejecutable tendria que ser mas amplia ,porque seguro que hay quien tenga la versión full y no lite así que el exe no se llamara DTLite.exe supongo, habria que saber los posibles nombres.

mirate haber si te sirve , pero lo que te digo... es facil que necesite adaptaciones a tu proyecto.


local found = true;
Resultados_de_la_busqueda = Folder.Find(_ProgramFilesFolder, "DAEMON*", false, nil);
if Resultados_de_la_busqueda ~= nil then
	resultado_FINAL = File.Find(Resultados_de_la_busqueda[1], "DTLite.exe", false, false, nil, nil);
	if  resultado_FINAL == nil then
		found = false;
	end
else
	found = false;
end
            
if not found then
 	msg = Dialog.Message("Error", "No se encontro el directorio de daemon tools por defecto\r\nPara poder montar la imagen es necesario.\r\n¿Deseas intalar daemon tools ahora?", MB_OKCANCEL, MB_ICONINFORMATION, MB_DEFBUTTON1);
 	if msg == IDOK then
 		File.Run("AutoPlay\\Docs\\DTLite.exe", "", "AutoPlay\\Docs", SW_SHOWNORMAL, false);
 		 error = Application.GetLastError();
          if (error ~= 0) then
              Dialog.Message("Error", _tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION);
          end
     else
     	Dialog.TimedMessage("","Cancelado por el usuario...",2000);
     end
else
Nombre = Button.GetText("Button1");
if Nombre == "Montar ISO" then
	Button.SetText("Button1", "Desmontar ISO");
else
	Button.SetText("Button1", "Montar ISO");
end

File.Run(resultado_FINAL[1], '-mount 0, "Autoplay\\Docs\\FunPhoto.iso"', "", SW_SHOWNORMAL, false);
	error = Application.GetLastError();
     if error ~= 0 then
       Dialog.Message("Error",_tblErrorMessages[error]);
     else
     	Dialog.TimedMessage("ISO","Montando Iso...",2000);
     end
end
También he visto que daemon instala varios directorios que entrarían en la búsqueda "DAEMON*" y no son el programa (DAEMON Toolbar por ejemplo) la casualidad es que el del programa por orden esta el primero en la tabla pero si esto no es asi podría dar fallos también.

Haber si te arregla algo esto ;)
Pues nuevamente gracias rafaxplayer, ¡ERES UN CAPO!

Puntualizando, he probado el script y realiza bien la busqueda en sistemas de 32 y 64 Bits.

Para montar la imagen lo he probado en Windows 7 64 Bits donde el directorio cambia al Program Files (x86) y monta perfecto.

Me ha gustado mucho el detalle de la ventana que dice "Montando ISO"

Solo ha quedado algo que no sé como corregirlo por mis escasos conocimientos en Autoplay.

El boton ya solo monta la imagen, no la desmonta.

Así lo había puesto yo para montar y desmontar automaticamente
Nombre = Button.GetText("Button1");
if Nombre == "Montar ISO" then
result = File.Run(_ProgramFilesFolder .. "\\DAEMON Tools Lite\\DTLite.exe", '-mount 0, "Autoplay\\Docs\\FunPhoto.iso"', "", SW_SHOWNORMAL, false);
Button.SetText("Button1", "Desmontar ISO");
else
Button.SetText("Button1", "Montar ISO");
result = File.Run(_ProgramFilesFolder .. "\\DAEMON Tools Lite\\DTLite.exe", '-unmount 0', "", SW_SHOWNORMAL, false);
Utilizaba mount 0 para montar y unmount 0 para desmontar.

Creo falto el parametro para desmontar la imagen, pero no se como añadirlo...te pido mil disculpas por las molestias ocasionadas.

Si no te causa mucho trabajo podrías ayudarme a añadir correctamente ese parametro para desmontar y si fuese posible poner un mensaje de "Desmontando ISO"

No tengo palabras para agradecerte por el tiempo invertido en ayudar a los demás.

Realmente un EXCELENTE foro y más aún MAGNIFICAS las personas que lo dirigen.