path archive extraction iexpress

path - Iexpress-ruta de extracción



archive extraction (1)

Voy a crear un archivo autoextraíble, pero tengo un problema al conectarme con la ruta predeterminada de la extracción. Me gustaría extraer mis archivos en la misma ruta que el programa de archivo de autoextracción. Desafortunadamente, los archivos están extrayendo en otra ruta (C: / Users / computadora / AppData / Temp / IXP000.TMP). ¿Es posible establecer el camino?


No puedo encontrar ninguna forma directa de hacer esto con IExpress, pero hay un truco que podemos aplicar.

Pero primero señalaré que esto es realmente fácil con algo como el módulo 7zCon.sfx 7-Zip (si todo lo que necesitas hacer es tener el extracto de archivo en el directorio actual, sin preguntas). Entonces quizás quieras probar algo diferente a IExpress.

De todos modos, el problema con IExpress es que, en el momento en que se ejecuta nuestro programa de instalación , ya no estamos en el directorio del archivo original; el directorio actual ahora es algo así como %temp%/IXP000.TMP . Entonces, necesitamos encontrar el directorio de nuestro proceso principal, algo así como un dolor. Una vez que eso se conoce, podemos simplemente xcopy el contenido del archivo en la carpeta de destino.

En VBScript, se vería algo como esto:

Option Explicit Dim objShell, objWMI Dim objCmd, intMyPid, intMyParentPid, objMyParent Set objShell = CreateObject("WScript.Shell") Set objWMI = GetObject("winmgmts:root/cimv2") Set objCmd = objShell.Exec("cmd.exe") intMyPid = objWMI.Get("Win32_Process.Handle=''" & objCmd.ProcessID & "''").ParentProcessId objCmd.Terminate intMyParentPid = objWMI.Get("Win32_Process.Handle=''" & intMyPid & "''").ParentProcessId Set objMyParent = objWMI.Get("Win32_Process.Handle=''" & intMyParentPid & "''") objShell.Run "xcopy /y * " & """" & Left(objMyParent.ExecutablePath, _ InStrRev(objMyParent.ExecutablePath, ".exe", -1, vbTextCompare) -1) &_ "/""", 0, True

Su programa de instalación sería entonces, por ejemplo: wscript extractToOriginalLocation.vbs //B

(Inspirado por la respuesta a esta pregunta )