无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: dos时代菜鸟
打印 上一主题 下一主题

diskpart shell ,用 pecmd 给 diskpart 做个外壳 2022.03.23 ver:1.28 改进

    [复制链接]
151#
 楼主| 发表于 2022-3-26 21:47:14 | 显示全部楼层
527104427 发表于 2022-3-26 21:42
1.27进不去了,win7  64bit

1、带 debug 参数 试试 ,看能调用 diskpart 进程不。
2、1楼有个 1.26.7 版的,不知道 能进不
回复

使用道具 举报

152#
 楼主| 发表于 2022-3-26 21:55:59 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2022-3-26 21:58 编辑
yesfei 发表于 2022-3-26 21:46
*和#代表什么意思?

hid 列 的 # 表示分区类别决定的隐藏属性,* 表示 可以设定改变的隐藏属性
act 列 的 * 表示这个分区是 mbr上的 激活分区,或者是 gpt 上的 esp 引导分区。
回复

使用道具 举报

153#
 楼主| 发表于 2022-3-26 21:57:00 | 显示全部楼层
527104427 发表于 2022-3-26 21:42
1.27进不去了,win7  64bit

怀疑 pecmd 的 exec指令的 管道 功能 在 win7 下 有问题。
但还需要 进一步 研究下。我需要弄个 win7 虚拟机。

点评

1.26正常,1.27带debug闪一下diskpart窗口,自动关闭了,然后无限计时  详情 回复 发表于 2022-3-26 22:07
回复

使用道具 举报

154#
 楼主| 发表于 2022-3-26 22:17:18 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2022-3-27 00:24 编辑
527104427 发表于 2022-3-26 22:07
1.26正常,1.27带debug闪一下diskpart窗口,自动关闭了,然后无限计时

实锤  是 pecmd 的 exec| 管道指令在 win7 下失灵。
或许需要 另外的写法。
增加一个 参数,原来需要 Exec| -io 且必须通过 cmd 调用 pecmd 才可以了

点评

OK了  详情 回复 发表于 2022-3-27 11:37
回复

使用道具 举报

155#
 楼主| 发表于 2022-3-26 22:35:32 | 显示全部楼层
升级 1.27.2
修正 win7 下 diskpart 进程失效的问题。
回复

使用道具 举报

156#
 楼主| 发表于 2022-3-27 00:00:27 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2022-3-27 00:05 编辑

关于 pecmd 的 exec| 管道指令在win7 下的问题
1、不能附带 -hide 参数,需要隐藏时 需要 用 !
2. pecmd 必须 被 cmd.exe 调用 才能 实现 管道功能,也就是必须在 批处理中调用。这就失去单文件 的意义了。

重新更新了一下脚本,做了个 系统版本判断,
小于10 的,就用老办法 用 cmd 实现diskpart 结果输出到文件,
大于等于10 的,才用 exec| 管道功能。

这个大概是 两个版本 win 下的 conhost.exe 不一样吧。


回复

使用道具 举报

157#
 楼主| 发表于 2022-3-27 12:06:56 来自手机 | 显示全部楼层
527104427 发表于 2022-3-27 11:37
OK了

OK
回复

使用道具 举报

158#
 楼主| 发表于 2022-8-5 16:43:28 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2022-8-5 17:05 编辑
ikaze 发表于 2022-8-5 16:19
汇报个小问题、
软件版本号为:1.27.2(2022.03.26)
1. 开启UAC情况下,直接运行程序会无限读条,以管理员 ...

谢谢反馈

分区软件 应该是在管理员 权限下运行,如果 uac 下 ,可能因为 diskpart 权限问题,导致数据信息获取不全或根本不能运行,可以尝试 附带参数 debug  看看 diskpart 窗口中的 命令 运行到什么程度了。目前 还不考虑 提权 的事情。理论上 diskpart 运行不了的,这个程序也运行不了。

至于 分辨率非 100百分比 时运行 计算机 导致  主窗口 变化,初步判断 是 pecmd 内置 计算机 与刷新率之间 有什么 指令设置,因为 是 调用的 pecmd 内部计算器,这个问题 不好解决了。
回复

使用道具 举报

159#
 楼主| 发表于 2022-8-5 20:16:22 | 显示全部楼层
ikaze 发表于 2022-8-5 19:17
刚刚测试了一下、针对程序中的 MAINIFEST 中内容将 'asInvoker' 替换为 'requireAdministrator' 即可让程序 ...

完全 看不懂
容我 细思量。
回复

使用道具 举报

160#
 楼主| 发表于 2022-8-5 20:23:36 | 显示全部楼层
ikaze 发表于 2022-8-5 19:17
刚刚测试了一下、针对程序中的 MAINIFEST 中内容将 'asInvoker' 替换为 'requireAdministrator' 即可让程序 ...

我只是把  一个 自制的  pecmd 2012 脚本 用 resource_hacker 导入 到 pecmd 默认内置脚本,
没本事动 pecmd 其他部分。
回复

使用道具 举报

161#
 楼主| 发表于 2022-8-5 22:43:31 | 显示全部楼层
ikaze 发表于 2022-8-5 22:30
我也是用 resource_hacker 把程序内的 Mainifest\\1 第 12 行中的 'asInvoker' 给改成 'requireAdministr ...



你说的是这个么?


如果在 pe 下 system 用户能用么?

点评

就是这个,我对比了NSIS提权和不提权编译的exe文件,缺失就是这点区别。 另外,我还发现了支持DPI缩放的代码,经测试,有效。不过修改后,你的程序界面可能会异常。  详情 回复 发表于 2022-8-5 22:55
回复

使用道具 举报

162#
 楼主| 发表于 2022-8-5 22:58:48 | 显示全部楼层
nttwqz 发表于 2022-8-5 22:55
就是这个,我对比了NSIS提权和不提权编译的exe文件,确实就是这点区别。

另外,我还发现了支持DPI缩放 ...

刚测试了一下 pe 下 可以运行,在 非 administrator 用户下运行,会提示用 administrator 运行并询问 用户密码
提权这个 可行。

分辨率这个 还需要测试下
回复

使用道具 举报

163#
 楼主| 发表于 2022-8-5 23:17:59 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2022-8-5 23:28 编辑
nttwqz 发表于 2022-8-5 22:55
就是这个,我对比了NSIS提权和不提权编译的exe文件,确实就是这点区别。

另外,我还发现了支持DPI缩放 ...
  1. <application xmlns="urn:schemas-microsoft-com:asm.v3">
  2. <windowsSettings>
  3. <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">false</dpiAware>
  4. </windowsSettings>
  5. </application>
复制代码


貌似 把 true 变成 false ,就可以了

DiskPart_Shell_1.27.2-(x64.admin-2).7z (959.79 KB, 下载次数: 280)

回复

使用道具 举报

164#
 楼主| 发表于 2022-8-7 11:45:04 | 显示全部楼层
ikaze 发表于 2022-8-7 02:32
是的、UAC的这个参数可在微软的文档查阅到具体用途

原来如此

点评

多谢指点  详情 回复 发表于 2022-8-7 20:56
回复

使用道具 举报

165#
 楼主| 发表于 2022-8-7 20:56:30 | 显示全部楼层


多谢指点
回复

使用道具 举报

166#
 楼主| 发表于 2022-8-8 08:31:04 | 显示全部楼层
ikaze 发表于 2022-8-7 02:32
是的、UAC的这个参数可在微软的文档查阅到具体用途

多谢指点
回复

使用道具 举报

167#
 楼主| 发表于 2022-11-3 18:47:08 | 显示全部楼层
银狼驰骋 发表于 2022-11-3 07:56
我顶,什么时候测试版可改为正式版呢?

或许 没有正式版,一直在测试。

点评

现在我应该下哪个呢?1.27.2 admin 测试 还是 1.27 单diskpart进程版  详情 回复 发表于 2022-11-3 20:22
回复

使用道具 举报

168#
 楼主| 发表于 2022-11-3 20:52:50 | 显示全部楼层
银狼驰骋 发表于 2022-11-3 20:22
现在我应该下哪个呢?1.27.2 admin 测试  还是  1.27 单diskpart进程版

1.27.2 admin 是 x64 的,区别就是 可以 自动提权运行,并且优化了dpi 的情况.

点评

最近在摆弄diskpart的时候,发现了一个致命的问题,就是给diskpart窗口发送中文的时候,变成乱码了,导致命令失败! 暂时没想到啥好办法去解决。 [attachimg]514428[/attachimg]  详情 回复 发表于 2022-12-6 12:48
回复

使用道具 举报

169#
 楼主| 发表于 2022-12-6 14:32:23 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2022-12-6 15:11 编辑
527104427 发表于 2022-12-6 12:48
最近在摆弄diskpart的时候,发现了一个致命的问题,就是给diskpart窗口发送中文的时候,变成乱码了, ...

如果是 diskpart.exe 界面 用 ansi 编码 + cp936 限定中文呢?
不知道 pecmd 窗口内容 是否可以做 大字符集限定。

问题应该 在  pecmd 的  code 指令上。
回复

使用道具 举报

170#
 楼主| 发表于 2022-12-6 16:38:56 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2022-12-6 16:49 编辑
527104427 发表于 2022-12-6 12:48
最近在摆弄diskpart的时候,发现了一个致命的问题,就是给diskpart窗口发送中文的时候,变成乱码了, ...

问题出在 信息发送指令上 ,以 uni 方式 逐个字节发送过去后,就不是汉字了。
如果 能一次 发送一句话,不用 转换 就好了。









┣━━┿━━┿━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃    │命令│'消息映射'                                                                                  ┃
┃    ├──┼──────────────────────────────────────────────┨
┃    │参数│■ENVI @窗口和控件名.MSG=[_$*+]消息号:[:[wPrm参数名],[lPrm参数名],]执行命令//定义消息映射捕 ┃
┃    │    │  捉默认前部命令;_为后部命令;$为替代命令,不执行系统响应,此时能返回结果码;*用于捕鼠器B的命┃
┃    │    │  令。+为超级捕捉。“执行命令”以-号开始,则从所在窗口开始执行(执行栈)。                  ┃
┃    │    │■ENVI @窗口和控件名.POSTMSG=[:变量名;]消息号[;参数wPrm[;参数lPrm]]     //异步发送消息      ┃
┃    │    │■ENVI @窗口和控件名.SENDMSG=[:变量名;]消息号[;参数wPrm[;参数lPrm]]     //同步发送消息      ┃
┃    │    │■ENVI @@POSTMSG=[:变量名;]窗口号;消息号[;参数wPrm[;参数lPrm]]          //异步发送消息      ┃
┃    │    │■ENVI @@SENDMSG=[:变量名;]窗口号;消息号[;参数wPrm[;参数lPrm]]          //同步发送消息      ┃
┃    │    │  上两个的窗口号可为*[?等待超时[?间隔]][*窗口类*][标题]                                     ┃
┃    │    │■适用于_SUB窗口和控件。消息号见:WM_消息.WCS,可以IMPORT . 变量名返回结果(含义因消息而定)  ┃
┃    │    │■消息号以#开头为PECMD应用自定义消息1-N。wPrm lPrm参数名, 参数名可以被引用。等号后的_表示下 ┃
┃    │    │  半部响应模式,在系统响应之后响应【对衍生消息会以相反的顺序响应】。 上面;可以用逗号。      ┃
┃    │    │  消息参数可以是数字,@PE变量名(ENVI$# 填充非字符串对象),$字符串(只适用于SENDMSG)。    ┃
┃    │    │  .MSG=的消息号可为:<COMMAND|NOTIFY>#[控件ID][#小消息号]。                                 ┃
┃消息├──┼──────────────────────────────────────────────┨
┃映射│示例│ ENVI @窗口1.MSG=#1::wp,lp,MESS- HELLO wp=[%wp%],lp=[%lp%]@#OK                              ┃
┃    │    │ ENVI @窗口1.POSTMSG=#1,1,2             //触发#1消息                                        ┃
┃    │    │ ENVI @窗口1.MSG=%&WM_LBUTTONUP%:MESS 你单击了                                              ┃
┃    │    │ ENVI @Edit1.MSG=%&WM_MOUSEENTER%:ENVI @Edit1=鼠标进来了                                    ┃
┃    │    │ ENVI @@SENDMSG=%__WinID%:#2;@str1;@str2   或  ENVI @@SENDMSG=%__WinID%:#2;$Line11;$abc11   ┃
┃    ├──┼──────────────────────────────────────────────┨
┃    │范例│PECMD怎样获取CMD命令行的回显?(不通过临时文件)如要获取CMD命令“dir d: /d”的回显          ┃
┃    ├──┼──────────────────────────────────────────────┨
┃    │    │ EXEC*  &V=!cmd.exe /c dir d: /d                                                            ┃
┃    │    │ MESS. [%&V%]@DEBUG#OK                                                                      ┃
┃    ├──┼──────────────────────────────────────────────┨
┃    │备注│ ※EXEC 还可将命令的输出实时显示在控件上(如EDIT/MEMO/LABE),详细请参阅EXEC命令的说明。      ┃


回复

使用道具 举报

171#
 楼主| 发表于 2022-12-6 17:59:37 | 显示全部楼层
527104427 发表于 2022-12-6 12:48
最近在摆弄diskpart的时候,发现了一个致命的问题,就是给diskpart窗口发送中文的时候,变成乱码了, ...

目前的解决办法 是 用 debug 参数运行,然后 当涉及到中文 命令时,直接把 指令组复制粘贴到 黑窗口里 回车。

点评

д  详情 回复 发表于 2022-12-6 22:04
本来想借用你的代码,重新设计diskpart-gui,看来想多了,哈哈哈 [attachimg]514444[/attachimg]  详情 回复 发表于 2022-12-6 18:37
我试过了,chcp 936也不行。由于中文就是占两个字节,只能分两次发送按键,没办法搞了 [attachimg]514443[/attachimg]  详情 回复 发表于 2022-12-6 18:36
回复

使用道具 举报

172#
 楼主| 发表于 2022-12-6 19:18:45 来自手机 | 显示全部楼层
527104427 发表于 2022-12-6 18:37
本来想借用你的代码,重新设计diskpart-gui,看来想多了,哈哈哈

pecmd 自己就能操作vhd

点评

已搞定,见楼上代码  详情 回复 发表于 2022-12-7 00:14
还有地方可能出现中文,比如格式化分区时的卷标。 所以,我放弃常驻内存的diskpart了。  详情 回复 发表于 2022-12-6 19:40
回复

使用道具 举报

173#
 楼主| 发表于 2022-12-7 14:15:56 | 显示全部楼层
527104427 发表于 2022-12-7 00:14
已搞定,见楼上代码



回复

使用道具 举报

174#
 楼主| 发表于 2022-12-7 15:14:37 | 显示全部楼层
已经更新放在一楼

感谢诸位老大,不然我都要考虑 用探测是否存在中文字符,然后 用 diskpart /s 实现带中文的指令了。

点评

还是有问题: select disk 5%nl%detail disk%nl%san%nl%select vdisk file="D:\doc\desktop\动态磁 盘转换成普通 磁盘,有无效分区.vhd" noerr%nl%detail vdisk%nl% 把以上代码一次性发过去,会被截断一部  详情 回复 发表于 2022-12-7 16:00
回复

使用道具 举报

175#
 楼主| 发表于 2022-12-7 16:15:01 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2022-12-7 16:25 编辑
527104427 发表于 2022-12-7 16:00
还是有问题:

select disk 5%nl%detail disk%nl%san%nl%select vdisk file="D:\doc\desktop\动态磁    ...

是因为有空格 ,还是 有 noerr ?

noerr 是只有 脚本中采用的,如果直接发指令,不用这个参数。

可以 用 envi. 做一个多行变量 ,我都是用 \n 做回车,不用 %NL%.

而且,确实需要 逐行发送指令,需要 时刻关注 输出结果,判断指令是否已经运行完了。


点评

并不是noerr和空格的问题。 应该是命令长度有限制。  详情 回复 发表于 2022-12-7 16:31
回复

使用道具 举报

176#
 楼主| 发表于 2022-12-7 16:40:18 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2022-12-7 16:48 编辑
527104427 发表于 2022-12-7 16:31
并不是noerr和空格的问题。
应该是命令长度有限制。

我感觉应该是 diskpart 命令解析要求 一行一行的执行。
你用 ENVI. 联合 \n  做一个 多行变量,再用 forx 逐行发过去看看。

我这边弄了个 超长中文带多个空格的vhd 名字,用脚本一样能正常加载和卸载。

用 envi.  带 .


点评

那没事了,我以为你跟我一样,是一次性发个全家桶过去。  详情 回复 发表于 2022-12-7 16:58
回复

使用道具 举报

177#
 楼主| 发表于 2023-2-23 06:43:15 来自手机 | 显示全部楼层
microlaf 发表于 2023-2-22 22:00
pe下只要有diskpart.exe和这个wcs脚本就行了吧

需要新版pecmd2012和id数据文本。
回复

使用道具 举报

178#
 楼主| 发表于 2023-4-5 07:05:28 来自手机 | 显示全部楼层
datbik189 发表于 2023-4-4 15:27
最近测试了下, 好像cmd.exe和diskpart.exe支持发送多行的指令的全家桶, 并成功运行. 测试成功的原因, 难道 ...

如果众多命令流中有一条是错误的,是否影响后继运行?

点评

不影响。  详情 回复 发表于 2023-4-5 08:21
回复

使用道具 举报

179#
 楼主| 发表于 2023-8-13 16:08:59 | 显示全部楼层
pda8888 发表于 2023-8-13 14:55
想请教楼主大神:

这其中的第4、5行:

gpt 会有 一个特殊分区。

点评

哦,原来如此,学习了。  详情 回复 发表于 2023-8-13 21:57
回复

使用道具 举报

180#
 楼主| 发表于 2024-4-9 18:49:01 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-5-3 04:56

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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