找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 2417|回复: 16

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

[复制链接]
发表于 2021-6-15 18:21:13 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

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

  3. [Form]
  4. Name=Form1
  5. ClassStyle=CS_VREDRAW,CS_HREDRAW,CS_DBLCLKS
  6. ClassName=
  7. 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
  8. Style=3 - 常规窗口
  9. Icon=
  10. Caption=MSI文件解压助手
  11. StartPosition=1 - 屏幕中心
  12. WindowState=0 - 正常
  13. Enabled=True
  14. Repeat=False
  15. Left=0
  16. Top=0
  17. Width=420
  18. Height=186
  19. TopMost=False
  20. Child=False
  21. MdiChild=False
  22. TitleBar=True
  23. SizeBox=True
  24. SysMenu=True
  25. MaximizeBox=False
  26. MinimizeBox=True
  27. Help=False
  28. Hscroll=False
  29. Vscroll=False
  30. MinWidth=0
  31. MinHeight=0
  32. MaxWidth=0
  33. MaxHeight=0
  34. NoActivate=False
  35. MousePass=False
  36. TransPer=0
  37. TransColor=SYS,25
  38. Shadow=0 - 无阴影
  39. BackColor=SYS,15
  40. MousePointer=0 - 默认
  41. Tag=
  42. Tab=True
  43. ToolTip=
  44. ToolTipBalloon=False
  45. AcceptFiles=False

  46. [TextBox]
  47. Name=Text1
  48. Index=-1
  49. Style=3 - 凹边框
  50. TextScrollBars=0 - 无滚动条
  51. Text=此处显示路径
  52. Enabled=False
  53. Visible=True
  54. MaxLength=0
  55. ForeColor=SYS,8
  56. BackColor=SYS,5
  57. Font=微软雅黑,9,0
  58. TextAlign=0 - 左对齐
  59. PasswordChar=
  60. Locked=False
  61. HideSelection=True
  62. Multiline=False
  63. Uppercase=False
  64. Lowercase=False
  65. Number=False
  66. AutoHScroll=True
  67. AutoVScroll=False
  68. Left=32
  69. Top=17
  70. Width=340
  71. Height=27
  72. Layout=0 - 不锚定
  73. MousePointer=0 - 默认
  74. Tag=
  75. Tab=True
  76. ToolTip=
  77. ToolTipBalloon=False
  78. LeftMargin=0
  79. RightMargin=0
  80. AcceptFiles=False

  81. [Button]
  82. Name=Command1
  83. Index=-1
  84. Caption=选择文件
  85. TextAlign=1 - 居中
  86. Ico=
  87. Enabled=True
  88. Visible=True
  89. Default=False
  90. OwnDraw=False
  91. MultiLine=False
  92. Font=微软雅黑,9,0
  93. Left=32
  94. Top=70
  95. Width=60
  96. Height=50
  97. Layout=0 - 不锚定
  98. MousePointer=0 - 默认
  99. Tag=
  100. Tab=True
  101. ToolTip=
  102. ToolTipBalloon=False

  103. [Button]
  104. Name=Command2
  105. Index=-1
  106. Caption=解压
  107. TextAlign=1 - 居中
  108. Ico=
  109. Enabled=True
  110. Visible=True
  111. Default=False
  112. OwnDraw=False
  113. MultiLine=False
  114. Font=微软雅黑,9,0
  115. Left=312
  116. Top=70
  117. Width=60
  118. Height=50
  119. Layout=0 - 不锚定
  120. MousePointer=0 - 默认
  121. Tag=
  122. Tab=True
  123. ToolTip=
  124. ToolTipBalloon=False


  125. [AllCode]
  126. Sub Form1_Command1_BN_Clicked(hWndForm As hWnd ,hWndControl As hWnd) '单击
  127.    Dim As String MsiFilename = FF_OpenFileDialog(hWndForm ,"msi" , ,ExePath ,"Windows安装程序(*.msi)|*.msi" , ,0 ,1)
  128.    Text1.Text = MsiFilename
  129.    Dim As Integer SpaceStr = InStr(MsiFilename ," ")
  130.    If SpaceStr > 0 Then
  131.       Text1.Text = """" & MsiFilename & """"
  132.    End If
  133.    If MsiFilename <> "" Then
  134.       Command2.Enabled = True
  135.    Else
  136.       Command2.Enabled = False
  137.    End If
  138.    
  139. End Sub

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

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

使用道具 举报

发表于 2021-6-18 07:47:25 | 显示全部楼层
这是啥?能给个更详细的解释吗?
回复 赞! 靠!

使用道具 举报

发表于 2021-6-18 09:53:40 | 显示全部楼层
0xAA55 发表于 2021-6-18 07:47
这是啥?能给个更详细的解释吗?

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

使用道具 举报

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

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

使用道具 举报

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

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

使用道具 举报

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

代码逻辑只要看[Allcode]里的就行了,其他都是UI方面的
回复 赞! 靠!

使用道具 举报

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

直接注册表里添加一个右键命令更省事吧
回复 赞! 靠!

使用道具 举报

 楼主| 发表于 2021-6-23 21:19:20 | 显示全部楼层
Ayala 发表于 2021-6-21 22:26
直接注册表里添加一个右键命令更省事吧

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

使用道具 举报

发表于 2021-6-25 21:28:41 | 显示全部楼层
本帖最后由 Ayala 于 2021-6-25 21:30 编辑
WeaponJang 发表于 2021-6-23 21:19
怎么添加,我百度找了一圈没找到怎么弄这个MSI右键解压



  1. Windows Registry Editor Version 5.00

  2. [HKEY_CLASSES_ROOT\*\shell\msiexec]
  3. @="解压msi文件"

  4. [HKEY_CLASSES_ROOT\*\shell\msiexec\command]
  5. @="cmd /k C:\\Windows\\System32\\msiexec.exe /a "%1" /qn+ TARGETDIR=c:\\temp & cmd /k start c:\\temp"
复制代码
回复 赞! 靠!

使用道具 举报

 楼主| 发表于 2021-6-26 09:14:30 | 显示全部楼层
本帖最后由 WeaponJang 于 2021-6-26 09:18 编辑

这样会不会更好点

  1. Windows Registry Editor Version 5.00

  2. [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Msi.Package\shell\unpack]
  3. @="解压msi文件"
  4. [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Msi.Package\shell\unpack\command]
  5. @="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
[code]

Windows Registry Editor Version 5.00


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

使用道具 举报

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

那么注册表里怎么引用系统变量呢?
回复 赞! 靠!

使用道具 举报

发表于 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 类型才行 困扰了很多年的问题

对,我也是研究了很久才发现的
回复 赞! 靠!

使用道具 举报

 楼主| 发表于 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的区别坑过
回复 赞! 靠!

使用道具 举报

本版积分规则

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-11-23 17:49 , Processed in 0.035226 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表