WeaponJang 发表于 2021-6-15 18:21:13

[vfb]关于MSI文件只解压不安装的VFB项目源码

保存为Form1.frm,放到该项目的forms文件夹下
#VisualFreeBasic_Form#Version=5.5.8
Locked=0


Name=Form1
ClassStyle=CS_VREDRAW,CS_HREDRAW,CS_DBLCLKS
ClassName=
WinStyle=WS_THICKFRAME,WS_CAPTION,WS_SYSMENU,WS_MINIMIZEBOX,WS_CLIPSIBLINGS,WS_CLIPCHILDREN,WS_VISIBLE,WS_EX_WINDOWEDGE,WS_EX_CONTROLPARENT,WS_EX_LEFT,WS_EX_LTRREADING,WS_EX_RIGHTSCROLLBAR,WS_POPUP,WS_SIZEBOX
Style=3 - 常规窗口
Icon=
Caption=MSI文件解压助手
StartPosition=1 - 屏幕中心
WindowState=0 - 正常
Enabled=True
Repeat=False
Left=0
Top=0
Width=420
Height=186
TopMost=False
Child=False
MdiChild=False
TitleBar=True
SizeBox=True
SysMenu=True
MaximizeBox=False
MinimizeBox=True
Help=False
Hscroll=False
Vscroll=False
MinWidth=0
MinHeight=0
MaxWidth=0
MaxHeight=0
NoActivate=False
MousePass=False
TransPer=0
TransColor=SYS,25
Shadow=0 - 无阴影
BackColor=SYS,15
MousePointer=0 - 默认
Tag=
Tab=True
ToolTip=
ToolTipBalloon=False
AcceptFiles=False


Name=Text1
Index=-1
Style=3 - 凹边框
TextScrollBars=0 - 无滚动条
Text=此处显示路径
Enabled=False
Visible=True
MaxLength=0
ForeColor=SYS,8
BackColor=SYS,5
Font=微软雅黑,9,0
TextAlign=0 - 左对齐
PasswordChar=
Locked=False
HideSelection=True
Multiline=False
Uppercase=False
Lowercase=False
Number=False
AutoHScroll=True
AutoVScroll=False
Left=32
Top=17
Width=340
Height=27
Layout=0 - 不锚定
MousePointer=0 - 默认
Tag=
Tab=True
ToolTip=
ToolTipBalloon=False
LeftMargin=0
RightMargin=0
AcceptFiles=False


Name=Command1
Index=-1
Caption=选择文件
TextAlign=1 - 居中
Ico=
Enabled=True
Visible=True
Default=False
OwnDraw=False
MultiLine=False
Font=微软雅黑,9,0
Left=32
Top=70
Width=60
Height=50
Layout=0 - 不锚定
MousePointer=0 - 默认
Tag=
Tab=True
ToolTip=
ToolTipBalloon=False


Name=Command2
Index=-1
Caption=解压
TextAlign=1 - 居中
Ico=
Enabled=True
Visible=True
Default=False
OwnDraw=False
MultiLine=False
Font=微软雅黑,9,0
Left=312
Top=70
Width=60
Height=50
Layout=0 - 不锚定
MousePointer=0 - 默认
Tag=
Tab=True
ToolTip=
ToolTipBalloon=False



Sub Form1_Command1_BN_Clicked(hWndForm As hWnd ,hWndControl As hWnd) '单击
   Dim As String MsiFilename = FF_OpenFileDialog(hWndForm ,"msi" , ,ExePath ,"Windows安装程序(*.msi)|*.msi" , ,0 ,1)
   Text1.Text = MsiFilename
   Dim As Integer SpaceStr = InStr(MsiFilename ," ")
   If SpaceStr > 0 Then
      Text1.Text = """" & MsiFilename & """"
   End If
   If MsiFilename <> "" Then
      Command2.Enabled = True
   Else
      Command2.Enabled = False
   End If
   
End Sub

Sub Form1_Command2_BN_Clicked(hWndForm As hWnd ,hWndControl As hWnd) '单击
   Dim As String npath = Text1.Text
   If Left(npath ,1) = """" Then
      npath = Left(npath ,InStrRev(npath ,".msi")-1) & """"
   Else
      npath = Left(npath ,InStrRev(npath ,".msi")-1)
   End If
   'MsgBox npath
   Exec("C:\Windows\System32\msiexec.exe" ,"/a " & Text1.Text & " /qn+ TARGETDIR=" & npath)
   Command2.Enabled = False
End Sub

Sub Form1_Shown(hWndForm As hWnd ,UserData As Integer) '窗口完全显示后。UserData 来自显示窗口最后1个参数。
   Command2.Enabled = False
End Sub

0xAA55 发表于 2021-6-18 07:47:25

这是啥?能给个更详细的解释吗?

系统消息 发表于 2021-6-18 09:53:40

0xAA55 发表于 2021-6-18 07:47
这是啥?能给个更详细的解释吗?

看起来像是不走安装直接解包提取msi目标安装的文件,以前我用过系统自带的命令行提取过,看样子楼猪这个方式就是GUI调系统的msi解包命令。

WeaponJang 发表于 2021-6-19 14:11:58

系统消息 发表于 2021-6-18 09:53
看起来像是不走安装直接解包提取msi目标安装的文件,以前我用过系统自带的命令行提取过,看样子楼猪这个 ...

是的,你说对了.敲命令太累了,鼠标点一点舒服多了,而且用这个可以防止空格路径忘记加引号

0xAA55 发表于 2021-6-20 18:13:59

WeaponJang 发表于 2021-6-19 14:11
是的,你说对了.敲命令太累了,鼠标点一点舒服多了,而且用这个可以防止空格路径忘记加引号 ...

原来如此。但主要是你直接把VFB的frm内容放上来了,很多信息都是我觉得没必要需要的,就跳过不看了。

WeaponJang 发表于 2021-6-20 21:16:52

0xAA55 发表于 2021-6-20 18:13
原来如此。但主要是你直接把VFB的frm内容放上来了,很多信息都是我觉得没必要需要的,就跳过不看了。 ...

代码逻辑只要看里的就行了,其他都是UI方面的

Ayala 发表于 2021-6-21 22:26:57

WeaponJang 发表于 2021-6-19 14:11
是的,你说对了.敲命令太累了,鼠标点一点舒服多了,而且用这个可以防止空格路径忘记加引号 ...

直接注册表里添加一个右键命令更省事吧

WeaponJang 发表于 2021-6-23 21:19:20

Ayala 发表于 2021-6-21 22:26
直接注册表里添加一个右键命令更省事吧

怎么添加,我百度找了一圈没找到怎么弄这个MSI右键解压

Ayala 发表于 2021-6-25 21:28:41

本帖最后由 Ayala 于 2021-6-25 21:30 编辑

WeaponJang 发表于 2021-6-23 21:19
怎么添加,我百度找了一圈没找到怎么弄这个MSI右键解压



Windows Registry Editor Version 5.00


@="解压msi文件"


@="cmd /k C:\\Windows\\System32\\msiexec.exe /a \"%1\" /qn+ TARGETDIR=c:\\temp & cmd /k start c:\\temp"

WeaponJang 发表于 2021-6-26 09:14:30

本帖最后由 WeaponJang 于 2021-6-26 09:18 编辑

Ayala 发表于 2021-6-25 21:28
这样会不会更好点

Windows Registry Editor Version 5.00


@="解压msi文件"

@="cmd.exe /c C:\\Windows\\System32\\msiexec.exe /a \"%1\" /qn+ TARGETDIR=c:\\msitemp && start c:\\msitemp"

系统消息 发表于 2021-6-28 09:49:43

本帖最后由 系统消息 于 2021-6-28 09:53 编辑

Ayala 发表于 2021-6-25 21:28


Windows Registry Editor Version 5.00


C:\Temp 建议换成 %Temp%,C盘下分User目录你没有狗管理权限无法写入。
另外用户的系统不一定在C盘,请用 %SystemRoot% 环境变量获取正确的Windows目录路径。

Ayala 发表于 2021-7-1 21:43:05

系统消息 发表于 2021-6-28 09:49
C:\Temp 建议换成 %Temp%,C盘下分User目录你没有狗管理权限无法写入。
另外用户的系统不一定在C盘,请用 ...

那么注册表里怎么引用系统变量呢?

Ayala 发表于 2021-7-1 22:02:56

系统消息 发表于 2021-6-28 09:49
C:\Temp 建议换成 %Temp%,C盘下分User目录你没有狗管理权限无法写入。
另外用户的系统不一定在C盘,请用 ...

原来 需要REG_EXPAND_SZ 类型才行 困扰了很多年的问题

系统消息 发表于 2021-7-2 09:59:37

Ayala 发表于 2021-7-1 22:02
原来 需要REG_EXPAND_SZ 类型才行 困扰了很多年的问题

对,我也是研究了很久才发现的

WeaponJang 发表于 2021-7-3 13:08:55

系统消息 发表于 2021-7-2 09:59
对,我也是研究了很久才发现的

看来您是注册表老手了,有考虑写个你趟注册表的坑的心得吗?

系统消息 发表于 2021-7-3 14:52:27

WeaponJang 发表于 2021-7-3 13:08
看来您是注册表老手了,有考虑写个你趟注册表的坑的心得吗?

也没啥特别的心得,就是被REG_SZ和REG_EXPAND_SZ的区别坑过
页: [1]
查看完整版本: [vfb]关于MSI文件只解压不安装的VFB项目源码