In version ≥ 1.7.8 Windows apps can be listed from virt-inspector:
$ virt-inspector Win7.img
[...]
<applications>
<application>
<name>Mozilla Firefox (3.6.12)</name>
<display_name>Mozilla Firefox (3.6.12)</display_name>
<version>3.6.12 (en-GB)</version>
<install_path>C:\Program Files\Mozilla Firefox</install_path>
[etc]
or from guestfish:
$ guestfish -a Win7.img --ro -i
Welcome to guestfish, the libguestfs filesystem interactive shell for
editing virtual machine filesystems.
Type: 'help' for help on commands
'man' to read the manual
'quit' to quit the shell
Operating system: Windows 7 Enterprise
/dev/vda2 mounted on /
><fs> inspect-list-applications /dev/vda2
[0] = {
app_name: Mozilla Firefox (3.6.12)
app_display_name: Mozilla Firefox (3.6.12)
app_epoch: 0
app_version: 3.6.12 (en-GB)
app_release:
app_install_path: C:\Program Files\Mozilla Firefox
app_trans_path:
app_publisher: Mozilla
app_url: http://www.mozilla.com/en-GB/
app_source_package:
app_summary:
app_description:
}
[1] = {
app_name: VLC media player
app_display_name: VLC media player 1.1.5
app_epoch: 0
app_version: 1.1.5
app_release:
app_install_path: C:\Program Files\VideoLAN\VLC
app_trans_path:
app_publisher: VideoLAN
app_url: http://www.videolan.org/
app_source_package:
app_summary:
app_description:
}
The same API also works for Fedora, RHEL, Debian and Ubuntu guests, where it lists installed packages instead of “applications”.

Hi, Mr. Rich
I found a problem when I use the libguestfs:
In my project, I share a vmdk file with the ntfs file system in a container through the qemu-nbd server. I want to access it in the form of guestfish -a nbd://ip in another container based on the ARM-64 environment. /dev/sdx can be mounted successfully. When I call inspect_os, the shell throws a Hivex error. The logs are as follows:
PE32+ executable (console) x86-64, for MS Windows
chroot: /sysroot: running ‘case_sensitive_path: /Windows/system32/config/software’
chroot: /sysroot: running ‘is_file: /Windows/System32/config/SOFTWARE’
chroot: /sysroot: running ‘case_sensitive_path: /Windows/system32/config/system’
chroot: /sysroot: running ‘is_file: /Windows/System32/config/SYSTEM’
hivex: hivex_open: successfully read Windows Registry hive file:
pages: 14055 [sml: 4096, lge: 16384]
blocks: 1111157 [sml: 8, avg: 56, lge: 16352]
blocks used: 1110291
bytes used: 62533912
hivex: hivex_close: hivex_close
ocaml_exn: ‘inspect_os’ raised ‘Hivex.Error’ exception
guestfsd: error: internal error: inspect_os: unhandled exception thrown: Hivex.Error
guestfsd: => inspect_os (0x1e0) took 2.93 secslibguestfs: trace: inspect_os = NULL (error)
libguestfs: error: inspect_os: internal error: inspect_os: unhandled exception thrown: Hivex.Error
I have installed the Hivex software package. After the problem cannot be located, I attempt to compile Hivex manually. After I run make, the following error occurs:
make[2]: Entering directory ‘/root/hivex-1.3.17/images’
CC mklarge-mklarge.o
CCLD mklarge
cmp -s ./minimal ./minimal || \
cp ./minimal ./minimal
./mklarge ./minimal ./large
mklarge: hivex_node_add_child: Invalid argument
make[2]: *** [Makefile:1539: large] Error 1
make[2]: Leaving directory ‘/root/hivex-1.3.17/images’
make[1]: *** [Makefile:1402: all-recursive] Error 1
make[1]: Leaving directory ‘/root/hivex-1.3.17’
make: *** [Makefile:1309: all] Error 2
I don’t know how to fix this mistake. What’s your opinion about this situation? Look forward to your reply.
Thanks,
Yuxing
After I run the guestfish_run command, the log is as follows:
OCaml daemon loaded
trying to open virtio-serial channel ‘/dev/virtio-ports/org.libguestfs.channel.0’
2020-10-22T13:01:32.849704+08:00|info|qemu[21410]|[21410]|handle_control_message[372]|: virtio serial port ‘1’ handle control message event = 6, value = 1
commandrvf: stdout=n stderr=y flags=0x0
commandrvf: udevadm –debug settle
Unknown filesystem type 62656572 mounted on /sys/fs/cgroup.
libguestfs: recv_from_daemon: received GUESTFS_LAUNCH_FLAG
libguestfs: appliance is up
libguestfs: trace: launch = 0
But I can still list the file systems and mount /dev/sdx.
Look forward to your reply.
Thanks,
Yuxing