如何通过VirtualBox将Linux主机上的文件类型与Windows应用程序关联起来?

如何通过VirtualBox将Linux主机上的文件类型与Windows应用程序关联起来?

如何将桌面 Linux 中的文件类型与通过 VirtualBox 运行的 Windows 7 应用程序关联起来,以便它们无缝工作,并在需要时启动 VirtualBox?

我正在使用 KDE。


目前的方法

(Excel 文件示例):

在开始菜单中添加一个名为“Excel”的新条目

  • 命令:/home/USER/bin/excelstarter.sh %f
    • 见下文
  • 启动反馈效果不佳,因此已禁用

通过右键单击并选择运行方式将 .xlsx 文件与“Excel”关联

  • 记住所有类型文件的应用程序关联...

在VirtualBox中挂载相关文件夹

  • VirtualBox 主窗口 > 计算机设置 > 共享文件夹:

    • 添加:
      • 文件夹路径:/data
      • 自动安装
      • 永久化
    • 添加:
      • 文件夹路径:/home/USER
      • 自动安装
      • 永久化

禁用对空密码的组策略限制

如果没有此更改,如果未设置密码,VirtualBox 将不会运行命令。

  • 运行 gpedit.msc
  • 导航

    计算机配置\Windows 设置\安全设置\本地策略\安全选项

  • 改变

    限制本地帐户仅使用空白密码进行控制台登录残疾人


excelstarter.sh

这里的想法是,如果 VirtualBox 尚未运行,则该文件负责启动 VirtualBox,等待其启动,然后使用已转换为 VirtualBox 中设置的相应安装的文件路径启动 Excel。

# Start VM (if it is already started this does nothing)
VBoxManage startvm "win7_hilti"

# Replace folders with windows-local versions (mounts need to be setup)
# /data/ is mounted as F:
original=$1
findWhat=\/data/
replaceWith="F:\\"
fixedFilePath="${original/$findWhat/$replaceWith}"

# /home/USER/ is mounted as G:
original=$fixedFilePath
findWhat=\/home\/USER/
replaceWith="G:\\"
fixedFilePath="${original/$findWhat/$replaceWith}"

# Used for debugging the file paths
#notify-send $fixedFilePath

# Start Excel
# Try to run it until it the machine has started
until VBoxManage guestcontrol "VM-NAME" start --exe "C:\\Program Files\\Microsoft Office\\Office14\\EXCEL.EXE" --username WINDOWSUSER "excel" -- "$fixedFilePath"
do
  # Sleep 1 gave the problem that the mounts were not yet ready, sleep 2 seems to work fine
  sleep 2
done

问题

  • 如果 VirtualBox 已经在后台运行,则它不会获得焦点。
  • 在等待 VirtualBox 启动时,丑陋的睡眠在循环中。睡眠 1 在安装尚未设置的情况下出现了问题。在速度较慢的机器上,可能需要增加该值。
  • 有时,VirtualBox 启动后它不会启动 Excel。

参考

VBox管理访客控制

修复启用无密码使用

答案1

一些调整:

-- 我没有硬编码应用程序的路径,而是使用 cmd.exe 启动命令:

options=( --username WINDOWSUSER --exe "%SystemRoot%\system32\cmd.exe" -- 'cmd' /c start "run this" "$fixedFilePath" ) 其中 $fixedFilePath 与您的代码中相同。即使 $fixedFilePath 包含空格,这些选项也有效。

这概括了脚本——它现在适用于任何类型的文件,而不仅仅是 Excel 文件。

如果 $fixedFilePath 是 Windows 客户机中程序的完整路径,它也应该起作用; %PATH 上程序的名称(带扩展名);或名称(带扩展名)(如果是已注册程序),例如 winword.exe、excel.exe。

然后我在 stderr 上测试了 VBoxManage guestcontrol 返回的字符串:

nError=1
nTries=0

while [ $nError -gt 0 ] && [ $nTries -lt 20 ]; do

   nError=$(VBoxManage guestcontrol win7_hilti start "${options[@]}" 2>&1 >/dev/null | grep -c "error")
   ((++nTries))
   sleep 2

done

(其中一些是我借来的这个来源

相关内容