Iexpress - путь извлечения
Я собираюсь создать самораспаковывающийся архив, но у меня возникла проблема с установкой пути извлечения по умолчанию. Я хотел бы извлечь мои файлы по тому же пути, что и программа самораспаковывающегося архива. К сожалению, файлы извлекаются по другому пути (C:\Users\computer\AppData\Temp\IXP000.TMP). Можно ли установить путь?
2 ответа
Я не могу найти какой-либо прямой способ сделать это с IExpress, но есть один прием, который мы можем применить.
Но сначала я укажу, что это действительно легко с чем-то вроде 7-Zip7zCon.sfx
модуль (если все, что вам нужно сделать, это извлечь архив в текущий каталог, не задавая вопросов). Так что вы можете просто попробовать что-то другое, чем IExpress.
В любом случае, проблема с IExpress заключается в том, что во время работы нашей программы установки мы больше не находимся в каталоге исходного архива; текущий каталог теперь что-то вроде %temp%\IXP000.TMP
, Так что нам нужно найти каталог нашего родительского процесса - что-то вроде боли. Как только это станет известно, мы можем просто xcopy
содержимое архива в папку назначения.
В VBScript это будет выглядеть примерно так:
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
Ваша установочная программа будет, например: wscript extractToOriginalLocation.vbs //B
,
(Отчасти вдохновлен ответом на этот вопрос.)
Вы всегда можете использовать cmd-скрипт и выводить строки кода в файлы в определенных каталогах.