Firefox Portable Profile Exporter .::v 3.0::.
Publicado: 21 Mar 2009, 01:36
Buenas a todos...
Como siempre, aprendiendo nuevas cosas sobre AutoIt con su ayuda me puse a pensar... me encantan las aplicaciones portables y hago uso frecuente de Firefox Portable, pero cada vez que sacan una nueva versión me toca pasar varios archivos, como Temas instalados, complementos, extensiones, marcadores, contraseñas, etc.
A esto se me ocurrio hacer un pequeño programa que me evitara pasar por todas las carpetas copiando los archivos que necesito y así nacio Firefox Portable Profile Exporter que simplifica esta tarea al pasar de una version a otra más reciente.
Esta version del archivo esta modificada para poder trabajar con algunos archivos nuevos de Firefox 3.5 Portable.
El programa compilado puede descargarse desde aquí: http://www.megaupload.com/?d=0ODFF8MH
El codigo es:
El Ejecutable debe de estar junto a la carpeta FirefoxPortable para que funcione.
Este proyecto no creo abandonarlo a medida que avance en mi experiencia lo mejorare pero tengo una pregunta:
¿Que codigo puedo usar para que el usuario pueda seleccionar la carpeta en la que se desea trabajar?... por ejemplo: el mismo tipo como cuando instalamos un programa y nos permite cambiar la carpeta donde deseamos instalarlo
A ver que les parece esta versión y espero que les sea de ayuda
Como siempre, aprendiendo nuevas cosas sobre AutoIt con su ayuda me puse a pensar... me encantan las aplicaciones portables y hago uso frecuente de Firefox Portable, pero cada vez que sacan una nueva versión me toca pasar varios archivos, como Temas instalados, complementos, extensiones, marcadores, contraseñas, etc.
A esto se me ocurrio hacer un pequeño programa que me evitara pasar por todas las carpetas copiando los archivos que necesito y así nacio Firefox Portable Profile Exporter que simplifica esta tarea al pasar de una version a otra más reciente.
Esta version del archivo esta modificada para poder trabajar con algunos archivos nuevos de Firefox 3.5 Portable.
El programa compilado puede descargarse desde aquí: http://www.megaupload.com/?d=0ODFF8MH
El codigo es:
Código: Seleccionar todo
#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=expmeme1987-2.ico
#AutoIt3Wrapper_outfile=Firefox Profile Exporter.exe
#AutoIt3Wrapper_Res_Comment=Exporta toda tu configuración de Firefox Portable a partir de la versión 3.0.* para la instalación de una version más reciente
#AutoIt3Wrapper_Res_Description=Firefox Portable Profile Exporter
#AutoIt3Wrapper_Res_Fileversion=3.0.0.0
#AutoIt3Wrapper_Res_LegalCopyright=2009 Emmanuel González
#AutoIt3Wrapper_Res_Language=4106
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#Include <GUIConstants.au3>
;~ configuración de la GUI
$img = FileInstall('softbymeme1987.jpg', "", 1)
ProcessWaitClose($img)
GuiCreate('Firefox Portable Profile Exporter .::v. 3.0::.', 440, 540)
GuiCtrlCreateGroup('BIENVENIDO!!!', 5, 10, 430, 55)
GuiCtrlCreateGroup('Exportación Simple', 5, 185, 430, 65)
GuiCtrlCreateLabel('Este Programa le ayudará a exportar su configuración personal de Firefox Portable', 10, 25)
GuiCtrlCreateLabel('para una nueva instalación. Seleccione una opción y espere confirmación', 10, 40)
GUICtrlCreateGroup('Funciones Especiales #1 (Exportación)', 5, 250, 430, 120)
GuiCtrlCreateLabel('-Exporta la configuración de AdBlockPlus-', 115, 270)
GuiCtrlCreateLabel('-Exporta su configuración si ha hecho cambios en "About:Config"-', 115, 308)
GuiCtrlCreateLabel('-Desistala la versión antigua de Firefox-', 115, 340)
GuiCtrlCreateGroup('Funciones Especiales #2 (Importación)', 5, 370, 430, 115)
GuiCtrlCreateLabel('-Importa la configuración de AdBlockPlus-', 115, 390)
GuiCtrlCreateLabel('-Importa los cambios hechos en "About:Config"-', 115, 420)
GuiCtrlCreateLabel('.::puede dar problemas en versiones de prueba::.', 115, 435)
GuiCtrlCreateLabel('Elimina la Carpeta donde se respaldo toda su configuración', 115, 460)
$pb = GUICtrlCreateProgress(10, 490, 420, 20)
GUICtrlCreatePic('softbymeme1987.jpg', 10, 515, 420, 20)
GuiCtrlCreateGroup('Selección del Directorio donde esta la carpeta de FirefoxPortable', 5, 65, 430, 60)
GuiCtrlCreateLabel('DIRECCIÓN = ', 10, 100)
GuiCtrlCreateGroup('Selección del Directorio donde se Guarda el Backup', 5, 125, 430, 60)
GuiCtrlCreateLabel('DIRECCIÓN = ', 10, 160)
$var = IniRead('Firefox Profile Exporter.ini', 'WorkFolders', 'PortableFolder', @DesktopDir)
GUICtrlCreateLabel($var, 80, 100, 340, 20)
$var2 = IniRead('Firefox Profile Exporter.ini', 'WorkFolders', 'BackUpFolder', @DesktopDir)
GuiCtrlCreateLabel($var2, 80, 160, 340, 20)
;~ Botones Apartado "Exportación simple"
$ExportButton = GuiCtrlCreateButton('1.) Exportar', 47, 210, 100, 20)
$ExportTest = GuiCtrlCreateButton('Test Version', 47, 230, 100, 15)
$IniciarFirefox = GuiCtrlCreateButton('2.) Iniciar Firefox', 162, 200, 100, 20)
$IniciarTest = GuiCtrlCreateButton('Test Version', 162, 220, 100, 15)
$ImportButton = GuiCtrlCreateButton('3.) Importar', 277, 210, 100, 20)
$ImportTest = GuiCtrlCreateButton('Test Version', 277, 230, 100, 15)
;~ Botones Apartado "Funciones Especiales #1 (Exportación)
$AdblockplusButton = GuiCtrlCreateButton('adblockplus-E', 10, 265, 100, 15)
$AdblockTestE = GuiCtrlCreateButton('Test Version', 10, 280, 100, 15)
$Version1Del = GuiCtrlCreateButton('Desistalar Firefox', 10, 335, 100, 15)
$VersionTestDel = GuiCtrlCreateButton('Test Version', 10, 350, 100, 15)
$AC = GuiCtrlCreateButton('About:Config-E', 10, 300, 100, 15)
$ACTestE = GuiCtrlCreateButton('Test Version', 10, 315, 100, 15)
;~ Botones Apartado "Funciones Especiales #2 (Importación)
$AdblockplusButton2 = GuiCtrlCreateButton('adblockplus-I', 10, 385, 100, 15)
$AdblockTestI = GuiCtrlCreateButton('Test Version', 10, 400, 100, 15)
$AC2 = GuiCtrlCreateButton('About:Config-I', 10, 420, 100, 15)
$ACTestI = GuiCtrlCreateButton('Test Version', 10, 435, 100, 15)
$DelBackup = GuiCtrlCreateButton('Eliminar Backup', 10, 455, 100, 15)
GuiSetState(@SW_SHOW)
;~ Boton de Seleción de Carpeta de Trabajo
$CarpetaTrabajo = GuiCtrlCreateButton('Directorio Trabajo', 120, 80, 200, 20)
;~ Directorio del la carpeta dBackup
$CarpetaBackup = GuiCtrlCreateButton('Directorio Backup', 120, 140, 200, 20)
While 1
$msg = GuiGetMsg()
Select
Case $msg = $ExportButton
GUICtrlSetData($pb, 0)
DirRemove($var2 & '\Save_Config', 1)
GUICtrlSetData($pb, 6)
DirCreate($var2 & '\Save_Config')
GUICtrlSetData($pb, 12)
DirCreate($var2 & '\Save_Config\extensions1')
GUICtrlSetData($pb, 18)
DirCreate($var2 & '\Save_Config\extensions2')
GUICtrlSetData($pb, 24)
DirCreate($var2 & '\Save_Config\Keys and BookMarks')
GUICtrlSetData($pb, 30)
DirCopy($var & '\FirefoxPortable\App\Firefox\extensions\', $var2 & '\Save_Config\extensions1', 1)
GUICtrlSetData($pb, 36)
DirCopy($var & '\FirefoxPortable\Data\profile\extensions\', $var2 & '\Save_Config\Extensions2', 1)
GUICtrlSetData($pb, 42)
FileCopy($var & '\FirefoxPortable\Data\profile\key3.db', $var2 & '\Save_Config\Keys and BookMarks\', 1)
GUICtrlSetData($pb, 48)
FileCopy($var & '\FirefoxPortable\Data\profile\signons3.txt', $var2 & '\Save_Config\Keys and BookMarks\', 1)
GUICtrlSetData($pb, 54)
FileCopy($var & '\FirefoxPortable\Data\profile\signons.sqlite', $var2 & '\Save_Config\Keys and BookMarks\', 1)
GUICtrlSetData($pb, 60)
FileCopy($var & '\FirefoxPortable\Data\profile\places.sqlite', $var2 & '\Save_Config\Keys and BookMarks\', 1)
GUICtrlSetData($pb, 66)
FileCopy($var & '\FirefoxPortable\Data\profile\cookies.sqlite', $var2 & '\Save_Config\Keys and BookMarks\', 1)
GUICtrlSetData($pb, 72)
FileCopy($var & '\FirefoxPortable\Data\profile\extensions.cache', $var2 & '\Save_Config\Keys and BookMarks\', 1)
GUICtrlSetData($pb, 78)
FileCopy($var & '\FirefoxPortable\Data\profile\extensions.ini', $var2 & '\Save_Config\Keys and BookMarks\', 1)
GUICtrlSetData($pb, 84)
FileCopy($var & '\FirefoxPortable\Data\profile\extensions.log', $var2 & '\Save_Config\Keys and BookMarks\', 1)
GUICtrlSetData($pb, 90)
FileCopy($var & '\FirefoxPortable\Data\profile\extensions.rdf', $var2 & '\Save_Config\Keys and BookMarks\', 1)
GUICtrlSetData($pb, 96)
ControlSend("Program Manager","","SysListView321","{f5}")
GUICtrlSetData($pb, 100)
MsgBox(0, 'Importación Completada', 'Instale su nueva versión y a continuación ejecute el Exportador')
GUICtrlSetData($pb, 0)
Case $msg = $ExportTest
GUICtrlSetData($pb, 0)
DirRemove($var2 & '\Save_Config', 1)
GUICtrlSetData($pb, 6)
DirCreate($var2 & '\Save_Config')
GUICtrlSetData($pb, 12)
DirCreate($var2 & '\Save_Config\extensions1')
GUICtrlSetData($pb, 18)
DirCreate($var2 & '\Save_Config\extensions2')
GUICtrlSetData($pb, 24)
DirCreate($var2 & '\Save_Config\Keys and BookMarks')
GUICtrlSetData($pb, 30)
DirCopy($var & '\FirefoxPortableTest\App\Firefox\extensions\', $var2 & '\Save_Config\extensions1', 1)
GUICtrlSetData($pb, 36)
DirCopy($var & '\FirefoxPortableTest\Data\profile\extensions\', $var2 & '\Save_Config\Extensions2', 1)
GUICtrlSetData($pb, 42)
FileCopy($var & '\FirefoxPortableTest\Data\profile\key3.db', $var2 & '\Save_Config\Keys and BookMarks\', 1)
GUICtrlSetData($pb, 48)
FileCopy($var & '\FirefoxPortableTest\Data\profile\signons3.txt', $var2 & '\Save_Config\Keys and BookMarks\', 1)
GUICtrlSetData($pb, 52)
FileCopy($var & '\FirefoxPortableTest\Data\profile\signons.sqlite', $var2 & '\Save_Config\Keys and BookMarks\', 1)
GUICtrlSetData($pb, 58)
FileCopy($var & '\FirefoxPortableTest\Data\profile\places.sqlite', $var2 & '\Save_Config\Keys and BookMarks\', 1)
GUICtrlSetData($pb, 64)
FileCopy($var & '\FirefoxPortableTest\Data\profile\cookies.sqlite', $var2 & '\Save_Config\Keys and BookMarks\', 1)
GUICtrlSetData($pb, 70)
FileCopy($var & '\FirefoxPortableTest\Data\profile\extensions.cache', $var2 & '\Save_Config\Keys and BookMarks\', 1)
GUICtrlSetData($pb, 76)
FileCopy($var & '\FirefoxPortableTest\Data\profile\extensions.ini', $var2 & '\Save_Config\Keys and BookMarks\', 1)
GUICtrlSetData($pb, 82)
FileCopy($var & '\FirefoxPortableTest\Data\profile\extensions.log', $var2 & '\Save_Config\Keys and BookMarks\', 1)
GUICtrlSetData($pb, 88)
FileCopy($var & '\FirefoxPortableTest\Data\profile\extensions.rdf', $var2 & '\Save_Config\Keys and BookMarks\', 1)
GUICtrlSetData($pb, 94)
ControlSend("Program Manager","","SysListView321","{f5}")
GUICtrlSetData($pb, 100)
MsgBox(0, 'Importación Completada a Version de Prueba', 'Instale su nueva versión de Prueba y a continuación ejecute el Exportador')
GUICtrlSetData($pb, 0)
Case $msg = $ImportButton
GUICtrlSetData($pb, 0)
DirCopy($var2 & '\Save_Config\extensions1', $var & '\FirefoxPortable\App\Firefox\extensions\', 1)
GUICtrlSetData($pb, 8)
DirCopy($var2 & '\Save_Config\Extensions2', $var & '\FirefoxPortable\Data\profile\extensions\', 1)
GUICtrlSetData($pb, 16)
FileCopy($var2 & '\Save_Config\Keys and BookMarks\key3.db', $var & '\FirefoxPortable\Data\profile\', 1)
GUICtrlSetData($pb, 24)
FileDelete($var & '\FirefoxPortable\Data\profile\signons.sqlite')
GUICtrlSetData($pb, 32)
FileCopy($var2 & '\Save_Config\Keys and BookMarks\signons3.txt', $var & '\FirefoxPortable\Data\profile\', 1)
GUICtrlSetData($pb, 40)
FileCopy($var2 & '\Save_Config\Keys and BookMarks\signons.sqlite', $var & '\FirefoxPortable\Data\profile\', 1)
GUICtrlSetData($pb, 48)
FileCopy($var2 & '\Save_Config\Keys and BookMarks\places.sqlite', $var & '\FirefoxPortable\Data\profile\', 1)
GUICtrlSetData($pb, 56)
FileCopy($var2 & '\Save_Config\Keys and BookMarks\cookies.sqlite', $var & '\FirefoxPortable\Data\profile\', 1)
GUICtrlSetData($pb, 64)
FileCopy($var2 & '\Save_Config\Keys and BookMarks\extensions.cache', $var & '\FirefoxPortable\Data\profile\', 1)
GUICtrlSetData($pb, 72)
FileCopy($var2 & '\Save_Config\Keys and BookMarks\extensions.ini', $var & '\FirefoxPortable\Data\profile\', 1)
GUICtrlSetData($pb, 80)
FileCopy($var2 & '\Save_Config\Keys and BookMarks\extensions.log', $var & '\FirefoxPortable\Data\profile\', 1)
GUICtrlSetData($pb, 88)
FileCopy($var2 & '\Save_Config\Keys and BookMarks\extensions.rdf', $var & '\FirefoxPortable\Data\profile\', 1)
GUICtrlSetData($pb, 100)
MsgBox(0, 'Exportación Completada', 'La Exportación se ha completado')
GUICtrlSetData($pb, 0)
Case $msg = $ImportTest
GUICtrlSetData($pb, 0)
DirCopy($var2 & '\Save_Config\extensions1', $var & '\FirefoxPortableTest\App\Firefox\extensions\', 1)
GUICtrlSetData($pb, 8)
DirCopy($var2 & '\Save_Config\Extensions2', $var & '\FirefoxPortableTest\Data\profile\extensions\', 1)
GUICtrlSetData($pb, 16)
FileCopy($var2 & '\Save_Config\Keys and BookMarks\key3.db', $var & '\FirefoxPortableTest\Data\profile\', 1)
GUICtrlSetData($pb, 24)
FileDelete($var & '\FirefoxPortableTest\Data\profile\signons.sqlite')
GUICtrlSetData($pb, 32)
FileCopy($var2 & '\Save_Config\Keys and BookMarks\signons3.txt', $var & '\FirefoxPortableTest\Data\profile\', 1)
GUICtrlSetData($pb, 40)
FileCopy($var2 & '\Save_Config\Keys and BookMarks\signons.sqlite', $var & '\FirefoxPortableTest\Data\profile\', 1)
GUICtrlSetData($pb, 48)
FileCopy($var2 & '\Save_Config\Keys and BookMarks\places.sqlite', $var & '\FirefoxPortableTest\Data\profile\', 1)
GUICtrlSetData($pb, 56)
FileCopy($var2 & '\Save_Config\Keys and BookMarks\cookies.sqlite', $var & '\FirefoxPortableTest\Data\profile\', 1)
GUICtrlSetData($pb, 64)
FileCopy($var2 & '\Save_Config\Keys and BookMarks\extensions.cache', $var & '\FirefoxPortableTest\Data\profile\', 1)
GUICtrlSetData($pb, 72)
FileCopy($var2 & '\Save_Config\Keys and BookMarks\extensions.ini', $var & '\FirefoxPortableTest\Data\profile\', 1)
GUICtrlSetData($pb, 80)
FileCopy($var2 & '\Save_Config\Keys and BookMarks\extensions.log', $var & '\FirefoxPortableTest\Data\profile\', 1)
GUICtrlSetData($pb, 88)
FileCopy($var2 & '\Save_Config\Keys and BookMarks\extensions.rdf', $var & '\FirefoxPortableTest\Data\profile\', 1)
GUICtrlSetData($pb, 100)
MsgBox(0, 'Exportación Completada', 'La Exportación a version de prueba se ha completado')
GUICtrlSetData($pb, 0)
Case $msg = $AdblockplusButton
GUICtrlSetData($pb, 0)
DirCreate($var2 & '\Save_Config\Other\adblockplus')
GUICtrlSetData($pb, 50)
FileCopy($var & '\FirefoxPortable\Data\profile\adblockplus\*.*', $var2 & '\Save_Config\Other\adblockplus\')
GUICtrlSetData($pb, 100)
MsgBox(0, 'Exportación adblockplus', 'Configuración de la Extención adblockplus Exportada Satisfactoriamente')
GUICtrlSetData($pb, 0)
Case $msg = $AdblockTestE
GUICtrlSetData($pb, 0)
DirCreate($var2 & '\Save_Config\Other\adblockplus')
GUICtrlSetData($pb, 50)
FileCopy($var & '\FirefoxPortableTest\Data\profile\adblockplus\*.*', $var2 & '\Save_Config\Other\adblockplus\')
GUICtrlSetData($pb, 100)
MsgBox(0, 'Exportación adblockplus', 'Configuración de la Extención adblockplus Exportada Satisfactoriamente')
GUICtrlSetData($pb, 0)
Case $msg = $Version1Del
GUICtrlSetData($pb, 0)
DirRemove($var & '\FirefoxPortable', 1)
GUICtrlSetData($pb, 100)
MsgBox(0, 'Desistalación Completa', 'La Versión antigua de Firefox Portable ha sido desistalada')
GUICtrlSetData($pb, 0)
Case $msg = $VersionTestDel
GUICtrlSetData($pb, 0)
DirRemove($var & '\FirefoxPortableTest', 1)
GUICtrlSetData($pb, 100)
MsgBox(0, 'Desistalación Completa', 'La Versión de Prueba de Firefox Portable ha sido desistalada')
GUICtrlSetData($pb, 0)
Case $msg = $AC
GUICtrlSetData($pb, 0)
DirCreate($var2 & '\Save_Config\Other\Config')
GUICtrlSetData($pb, 50)
FileCopy($var & '\FirefoxPortable\Data\profile\prefs.js', $var2 & '\Save_Config\Other\Config', 1)
GUICtrlSetData($pb, 100)
MsgBox(0, 'About:Config', 'Exportación de Configuración completa')
GUICtrlSetData($pb, 0)
Case $msg = $ACTestE
GUICtrlSetData($pb, 0)
DirCreate($var2 & '\Save_Config\Other\Config')
GUICtrlSetData($pb, 50)
FileCopy($var & '\FirefoxPortableTest\Data\profile\prefs.js', $var2 & '\Save_Config\Other\Config', 1)
GUICtrlSetData($pb, 100)
MsgBox(0, 'About:Config', 'Exportación de Configuración a Version de Prueba completa')
GUICtrlSetData($pb, 0)
Case $msg = $IniciarFirefox
Run($var & '\FirefoxPortable\FirefoxPortable.exe')
Case $msg = $IniciarTest
Run($var & '\FirefoxPortableTest\FirefoxPortable.exe')
Case $msg = $AdblockplusButton2
GUICtrlSetData($pb, 0)
DirCreate($var & '\FirefoxPortable\Data\profile\adblockplus')
GUICtrlSetData($pb, 50)
FileCopy($var2 & '\Save_Config\Other\adblockplus\*.*', $var & '\FirefoxPortable\Data\profile\adblockplus\', 1)
GUICtrlSetData($pb, 100)
MsgBox(0, 'Adblockplus', 'Configuración de AdblockPlus Importada Satisfactoriamente')
GUICtrlSetData($pb, 0)
Case $msg = $AdblockTestI
GUICtrlSetData($pb, 0)
DirCreate($var & '\FirefoxPortableTest\Data\profile\adblockplus')
GUICtrlSetData($pb, 50)
FileCopy($var2 & '\Save_Config\Other\adblockplus\*.*', $var & '\FirefoxPortableTest\Data\profile\adblockplus\', 1)
GUICtrlSetData($pb, 100)
MsgBox(0, 'Adblockplus', 'Configuración de AdblockPlus Importada Satisfactoriamente a Version de Prueba')
GUICtrlSetData($pb, 0)
Case $msg = $AC2
GUICtrlSetData($pb, 0)
DirCreate($var & '\FirefoxPortable\Data\profile')
GUICtrlSetData($pb, 50)
FileCopy($var2 & '\Save_Config\Other\Config\prefs.js', $var & '\FirefoxPortable\Data\profile', 1)
GUICtrlSetData($pb, 100)
MsgBox(0, 'About:Config', 'Importación de Configuración completa')
GUICtrlSetData($pb, 0)
Case $msg = $ACTestI
GUICtrlSetData($pb, 0)
DirCreate($var & '\FirefoxPortableTest\Data\profile')
GUICtrlSetData($pb, 50)
FileCopy($var2 & '\Save_Config\Other\Config\prefs.js', $var & '\FirefoxPortableTest\Data\profile', 1)
GUICtrlSetData($pb, 100)
MsgBox(0, 'About:Config', 'Importación de Configuración a version de prueba completada')
GUICtrlSetData($pb, 0)
Case $msg = $DelBackup
GUICtrlSetData($pb, 0)
DirRemove($var2 & '\Save_Config\extensions1', 1)
GUICtrlSetData($pb, 20)
DirRemove($var2 & '\Save_Config\extensions2', 1)
GUICtrlSetData($pb, 40)
DirRemove($var2 & '\Save_Config\Keys and BookMarks', 1)
GUICtrlSetData($pb, 60)
DirRemove($var2 & '\Save_Config\Other', 1)
GUICtrlSetData($pb, 80)
DirRemove($var2 & '\Save_Config', 1)
GUICtrlSetData($pb, 100)
MsgBox(0, 'Eliminación Completa', 'La información Respaldada ha sido borrada')
GUICtrlSetData($pb, 0)
Case $msg = $CarpetaTrabajo
$var = FileSelectFolder('Directorio donde se encuentra la carpeta de "FirefoxPortable".', "", 4)
GuiCtrlCreateLabel($var, 80, 100, 340, 20)
Case $msg = $CarpetaBackup
$var2 = FileSelectFolder("Directorio para Guardar el Backup", "", 4)
GuiCtrlCreateLabel($var2, 80, 160, 340, 20)
Case $msg = $GUI_EVENT_CLOSE
IniWrite('Firefox Profile Exporter.ini', 'WorkFolders', 'PortableFolder', $var)
IniWrite('Firefox Profile Exporter.ini', 'WorkFolders', 'BackUpFolder', $var2)
ExitLoop
EndSelect
WEnd
Este proyecto no creo abandonarlo a medida que avance en mi experiencia lo mejorare pero tengo una pregunta:
¿Que codigo puedo usar para que el usuario pueda seleccionar la carpeta en la que se desea trabajar?... por ejemplo: el mismo tipo como cuando instalamos un programa y nos permite cambiar la carpeta donde deseamos instalarlo
A ver que les parece esta versión y espero que les sea de ayuda