如何解決程式無法正常在Virtual Machine環境執行

會寫這篇主要是為了記錄如何解决「Sorry, This Application Cannot Be Run Under A Virtual Machine」的問題。相信這個錯誤時常出現在虛擬機執行遊戲或是相關應用程式時,會噴的 Error message。
加上使用 macOS 卻又想執行一些僅在 Windows 能執行的程式的因素,大多人的解決方案要不是BootCamp 就是 Parallels Desktop。

先前用了好一陣子 Parallels Desktop 也不曾遇過前面提到的 Error message,自從最近應用程式更新居然會噴錯了?!因此本篇會紀錄解決方式,以及自動化解決的方法。

如何解決程式無法正常在VM運行?

在前面有提到「Sorry, This Application Cannot Be Run Under A Virtual Machine」這串 Error message,其實直接上網 Google 就有很多相同的解決答案,這邊也不例外的記錄下相同的解法。

  1. Win+R(或Cmd+R)打開註冊表:regedit
  2. HKEY_LOCAL_MACHINE HARDWARE ACPI DSDT
  3. PRLS__ 重新命名    NOPRLS__
  4. HKEY_LOCAL_MACHINE HARDWARE DESCRIPTION
  5. System SystemBiosVersion:數值改為 NOPRLS   – 1

從上述流程可以了解到,最主要是前往「登錄編輯程式」將虛擬機相關字眼與參數修改成不是虛擬機。簡單的說,在建置虛擬機後,系統會自動將相關參數登錄進去。
不過由於我是使用 Parallels Desktop 遇到的問題,因此底下的相關名稱會是 PRLS 的字眼。
如果是使用 VirtualBox,會是 vbox 的字眼。舉例來說要將 VBOX__ 改為 NOVBOX__VBOX -1 改為 NOVBOX -1

撰寫檔案修改登錄編輯程式

如前面提到的,本篇主要是使用 Parallels Desktop 時遇到的問題。
恰好每當我重啟 Parallels Desktop 時,上一次修改過的參數又會被 Parallels Desktop 給重新改回去了。

為了解決每次重啟 Parallels Desktop 都會需要再修改一次,我們可以建立登錄檔(.reg)或批次檔(.bat),每次點擊檔案時,即可快速的完成修改登錄檔的動作。
(以下兩個例子可以直接將內縮文字複製到文字檔另存成 .reg 或 .bat)

以登錄檔(.reg)為例

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System]
“SystemBiosVersion”=”NOPRLS -1”

 

以批次檔(.bat)為例

reg add “HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System” /v “SystemBiosVersion” /t REG_SZ /d “NOPRLS -1” /f

 

但是這樣不也還是要手動去點登錄檔(.reg)或批次檔(.bat)嗎?為了讓每次開啟 Parallels Desktop 執行 Windows 時能自動執行檔案,我們需要使用到「工作排程器」。

 

自動化修改登錄編輯程式

Step1. 開啟工作排程器

工作排程器可以用來設定當觸發特定時機時,電腦會自動執行設定的程式。

 

Step2. 建立基本工作

在這個步驟可以替這項自動化流程取個名字,例如 NOPRLS。

 

Step3. 選擇觸發時機

這邊就是重點之一,請選擇「在您登入時執行」。如此一來便可以在 Windows 登入進桌面時才執行我們設定的程式。

因此在下一步選擇「啟動程式」,這樣後面就可以選擇登錄檔或批次檔,開機時便會自動執行。

 

Step4. 選擇啟動程式

在這個步驟瀏覽已經建立好的登錄檔(.reg)或批次檔(.bat)

下一步請打勾「當我按完成時開啟這項工作的內容對話方塊」,這樣Step5. 才可以順便設定最高權限執行。

 

Step5. 以最高權限執行

由於修改登錄檔會需要管理員權限,因此在這個步驟會需要勾選「以最高權限執行」。
並且在設定的下拉選單選擇作業系統。

註:

如果是筆電使用者,可以在「條件」的分頁確認「開啟/關閉」是否有打勾「只有在電腦是使用AC電源時才啟動這個工作」。(如果有打勾代表只有當筆電有接上電源時,這項工作排程才會執行)

 

Step6. 檢查是否成功設定

可以在左側的「工作排程器程式庫」當中,看到設定好的工作排程(以本篇例子為:NOPRLS)

 

 

Parallels Desktop 預設服務問題

如果是 Parallels Desktop 的使用者,除了上面提到的解決方法之外是不夠的。有些應用程式就是還會檢查系統後台服務是否有相關虛擬機的服務正在運行。
以 Parallels Desktop 來說,會有 Parallels Coherence Service 以及 Parallels Tools Service。

為了避免因為這兩項服務造成相關應用程式無法正常執行,可以到工作管理員的服務分頁將這兩項服務停止。

要注意的是,停用這兩項服務會影響到 Parallels Desktop 與 macOS 之間的溝通。也就是說可能會有像是快速鍵失效、畫面無法自動調整大小等問題。
不過如果像我每次使用 Parallels Desktop 就是為了使用特定應用程式,而且 Parallels Desktop 打開時都是已經事先調好視窗大小與解析度的話,那麼建議可以將這兩項服務的啟動類型改為「手動」。

工作管理員 ➜ 服務 ➜ 開啟服務 ➜ 找到 Parallels 相關服務 ➜ 改為手動 (右鍵內容,啟動類型:「手動」)

將啟動類型改為手動後,每當重啟 Parallels Desktop 時,這兩項服務預設就是停止狀態的。

 

小結

起初遇到「Sorry, This Application Cannot Be Run Under A Virtual Machine」的 Error message 時,除了要去工作管理員停止 Parallels Desktop 的兩項服務外,還要到 regedit 手動修改成 NOPRLS。
雖然不會花太多時間,但只要想到每次重啟都要這樣做真的太懶了,於是常常會將 Parallels Desktop 開著不關。

(這邊可能會有疑問,不就一直讓 Parallels Desktop 開著不關就不用一直去修改了嗎?這個答案是:桌機我確實都是將 Parallels Desktop 保持在開啟的狀態,但筆電為了省電是會將它關閉的)

 

既然每次開啟 Parallels Desktop 時都要進入 regedit 手動修改,後來才想到不是應該可以直接透過登錄檔去直接修改嗎?尤其透過批次檔同時可以修改登錄檔,還可以自動執行想執行的應用程式。
所以本文除了提供登錄檔以外,也提供了批次檔的寫法。可以根據每個人的使用習慣自行斟酌使用。

 

最後的最後,這篇是筆記來幫助金魚腦的自己不要忘記有這個解決方案,因此不會有太多詳細的解說或是“正確”的概念,如有哪邊描述有誤也歡迎聯繫討論修正,謝謝。