मैं Windows XP पर एक सेवा के रूप में वर्चुअलबॉक्स मशीन कैसे चला सकता हूं?


12

मेरे पास विंडोज एक्सपी होस्ट पर विंडोज एक्सपी के साथ एक वर्चुअलबॉक्स मशीन है।

मैं वर्चुअलबॉक्स को एक सेवा के रूप में कैसे शुरू कर सकता हूं, इसलिए मुझे हुड के नीचे एक वर्चुअल मशीन मिल सकती है, और मुझे अपनी वर्चुअल मशीन (नेटवर्क से वीएनसी के माध्यम से) तक पहुंचने के लिए वर्चुअलबॉक्स शुरू करने की आवश्यकता नहीं है?

मैंने पाया कि वर्चुअलबॉक्स प्रबंधित करने का तरीका हो सकता है, लेकिन जब से मैं इसके साथ एक शुरुआत कर रहा हूं, मुझे नहीं पता कि मुझे कहां से शुरू करना है।

कोई विचार?

जवाबों:


0

एक शॉर्टकट बनाएँ C:\Program Files\innotek VirtualBox\VBoxManage.exe

उद्धरण चिह्न दर्ज करने के बाद: startvm <your virtual machine name>

उदाहरण:

“C:\Program Files\innotek VirtualBox\VBoxManage.exe” startvm XP

शॉर्टकट को अपने स्टार्टअप फ़ोल्डर में कॉपी / स्थानांतरित करें।

ps: यदि आप वर्चुअल मशीन को तब तक विलंबित करना चाहते हैं जब तक कि आपका सिस्टम पूरी तरह से बूट नहीं हो जाता है, तो आप इसे XP में Startup Delayer के माध्यम से कर सकते हैं ।


यह ठीक काम करता है, क्या वर्चुअल मशीन के लिए खिड़की को "छिपाने" के लिए भी है?
झॉनी डी। कैनो -लेफ्टवेयर-

VBox को एक सेवा के रूप में चलाने से विंडो छिपाएगी नहीं। आप इसे AWM के साथ सिस्टम ट्रे में स्वचालित रूप से कम कर सकते हैं: eusing.com/WindowManager/WindowManager.htm

15
वीएम को बिना यूआई के लॉन्च करने के लिए चेकआउट "VBoxHeadless"। यदि आप VM की स्क्रीन देखना चाहते हैं, तो आपको RDP का उपयोग करना होगा।
मार्क पोर्टर

13
यह कोई सेवा नहीं है। जब आप लॉग ऑन करते हैं तो यह केवल VBox चलाता है - मशीन चालू होने पर नहीं। VBoxHeadless एक सेवा के रूप में चलने के लिए रास्ता है। नीचे मेरा जवाब देखें (जो मैं हारून कोपले की टिप्पणी के अनुसार सुधार करने वाला हूं)।
जॉन हार्ट

उत्तर का सेवा के रूप में चलने से कोई लेना-देना नहीं है। स्टार्टअप उपयोगकर्ता लॉगऑन के बाद होता है, पूरी तरह से अलग है कि सेवाओं का व्यवहार।
फेलिस पोलानो

9

ध्यान दें कि वर्तमान में स्वीकृत उत्तर (Molly7244) वास्तव में VM को तब शुरू करता है जब आप लॉगिन करते हैं - जब आप मशीन को बूट नहीं करते हैं। यह दूसरे शब्दों में, एक सेवा नहीं है।

मशीन बूट होने पर चलने वाली एक वास्तविक सेवा के लिए, मैं दो लिपियों (मूल रूप से यहाँ से ) का उपयोग साइबरविन (cygrunsrv) के साथ करता हूँ। इस पृष्ठ पर अन्यत्र बताए अनुसार VBoxHeadless मोड का उपयोग करता है।

पहली स्क्रिप्ट V VMHeadless के माध्यम से आपका VM चलाता है; इसे चलाने के लिए सही VM का नाम मिलता है (और अन्य जानकारी जैसे कि आपका VBOX होम डायरेक्टरी) पर्यावरण चर से। दूसरी स्क्रिप्ट एक विशेष वीएम के लिए एक सेवा स्थापित करती है (राइट एनवी के साथ पहली स्क्रिप्ट को कॉल करने के लिए cygrunsrv का उपयोग करके। vars set)। अंत में एक तीसरी फ़ाइल है जिसमें सामान्य फ़ंक्शन हैं। यदि आप इन सभी को एक निर्देशिका में रखते हैं, तो आप एक नया vm स्थापित कर सकते हैं:

$ VBOX_USER_HOME="/path/to/.VirtualBox/" vboxd-install MyVMName 3333

और फिर "नेट स्टार्ट vboxd-MyVMName" या "cygrunsrv -S vboxd-MyVMName" के साथ सेवा शुरू करें।

यहाँ VM-रनिंग स्क्रिप्ट है, "vboxd":

#!/bin/bash
# from http://forums.virtualbox.org/viewtopic.php?f=1&t=23536

##
## Manages start / stop of VirtualBox virtual machines
##

## load common functions
basedir="$(readlink -f $(dirname $0))"
source "$basedir/.libcommon" || exit 1

## parse arguments
parseArg vmName "$1" "$VBOXD_VM_NAME"
parseArg vmPort "$2" "$VBOXD_VM_PORT"

VBOX_INSTALL_PATH="$(cygpath "$VBOX_MSI_INSTALL_PATH")"

## define signal handler
function onHalt {
    warn "Stopping virtual machine '$vmName'"
    "$VBOX_INSTALL_PATH/VBoxManage" controlvm "$vmName" savestate
    exit 0
}

## install signal handler; cygrunsrv uses SIGTERM by default
trap 'onHalt' TERM

## hardcode this path if you like; it's required for VBox* utils to
## find the correct VirtualBox.xml config file and is usually set
## during a call to vboxd-install.
#export VBOX_USER_HOME="$USERPROFILE\\.VirtualBox"

## default VBoxHeadless port specification
portSpec="-e \"TCP/Ports=$vmPort\""

## determine vm state
info "Querying virtual machine '$vmName' state"
vmState=$( \
    "$VBOX_INSTALL_PATH/VBoxManage" showvminfo "$vmName" \
    | grep '^State:' \
    | sed 's/State: *//' )
info "Virtual machine '$vmName' is $vmState"

## if vm state is saved, we can't specify port without an exception,
## as port spec requires modification of the (immutable) saved machine
## state. See http://www.virtualbox.de/ticket/3609
if  [ "${vmState##saved}" != "$vmState" ]; then
    ## state is saved; clear port specification
    warn "Port specification is not allowed for saved vms"
    portSpec=""
fi

## start the VM
info "Starting virtual machine '$vmName' on port $vmPort"
"$VBOX_INSTALL_PATH/VBoxHeadless" -s "$vmName" $portSpec &

## record pid of VBoxHeadless child process and wait on it
pid="$!"
info "Waiting on VBoxHeadless child process $pid"
wait "$pid"

और यहां इंस्टॉलर स्क्रिप्ट है, "vboxd- इंस्टॉल":

#!/bin/bash
# http://forums.virtualbox.org/viewtopic.php?f=1&t=23536

##
## Registers a VirtualBox virtual machine to start as a service via cygrunsrv
##

## load common functions
basedir="$(readlink -f $(dirname $0))"
source "$basedir/.libcommon" || exit 1

## test for presence of cygrunsrv utility
if [ ! -x "$(which cygrunsrv)" ]; then
    die "Utility 'cygrunsrv' is not in path"
fi

## test VirtualBox configuration
if [ -z "$VBOX_USER_HOME" ]; then
    die "Required environment variable 'VBOX_USER_HOME' is undefined. " \
     "Please ensure this variable is set to point to the directory " \
     "containing your VirtualBox.xml configuration file."
fi
configFile=$(cygpath -u "$VBOX_USER_HOME\\VirtualBox.xml")
if [ ! -e "$configFile" ]; then
    die "VirtualBox configuration file '$(cygpath -w $configFile)' not found"
fi

## parse arguments
parseArg vmName "$1"
parseArg vmPort "$2"
parseArg vmUser "$3" "SYSTEM"

## if vmUser is not SYSTEM, update userSpec
userSpec="--interactive"
if [ "$vmUser" != "SYSTEM" ]; then
    ## "interactive" option disallowed when user is specified
    userSpec="--user \"$vmUser\""
fi

## install the service
cygrunsrv \
    --install "vboxd-$vmName" \
    --path "$basedir/vboxd" \
    --env "VBOXD_VM_NAME=$vmName" \
    --env "VBOXD_VM_PORT=$vmPort" \
    --env "VBOX_USER_HOME=$VBOX_USER_HOME" \
    --desc "VirtualBox virtual machine '$vmName' on port $vmPort" \
    $userSpec \
    --type auto \
    --termsig TERM \
    --shutsig TERM \
    --neverexits \
    --preshutdown \
    || die "Failed to install service"

और, अंत में, इन दोनों द्वारा संदर्भित ".लिबोमन" स्क्रिप्ट यहां दी गई है:

# -*-shell-script-*-
# from http://forums.virtualbox.org/viewtopic.php?f=1&t=23536

SCRIPT="$(basename $0)"
BASEDIR="$(readlink -f $(dirname $0))"
[ -z "$LOGLEVEL" ] && LOGLEVEL=2
[ -z "$LOGDATEFORMAT" ] && LOGDATEFORMAT="%Y-%m-%d %H:%M:%S "

function log {
    local now=""
    [ -n "$LOGDATEFORMAT" ] && now=$(date +"$LOGDATEFORMAT")
    echo "$SCRIPT $now$@" >&2
}

function debug {
    [ "$LOGLEVEL" -lt 3 ] && return
    log "[DEBUG] $@"
}

function info {
    [ "$LOGLEVEL" -lt 2 ] && return
    log "[INFO]  $@"
}

function warn {
    [ "$LOGLEVEL" -lt 1 ] && return
    log "[WARN]  $@"
}

function error {
    log "[ERROR] $@"
}

function die {
    error "$@"
    exit 1
}

function parseArg {
    local _name="$1"
    local _value="$2"
    local _default="$3"
    if [ -z "$_value" ]; then
        if [ -z "$_default" ]; then
            die "Required argument '$_name' is undefined"
        fi
     if [ "$_default" = "*EMPTY*" ]; then
         _value=""
     else
            _value="$_default"
     fi
    fi
    debug "$_name=\"$_value\""
    eval "$_name=\"$_value\""
}

यह समाधान मेरे लिए बहुत अच्छा काम करता है; उम्मीद है आपको भी कुछ ऐसा ही नसीब होगा।


4
+1 "नहीं सेवा" के लिए ... -1 उत्तर में इसे शामिल करने के बजाय समाधान से जोड़ने के लिए। वोट शून्य है। :) समाधान को शामिल करने के लिए संशोधन पर विचार करें क्योंकि लिंक सड़ांध इस उत्तर की दीर्घायु के लिए हानिकारक है।
हारून कोपले

8

इस बिंदु पर सबसे सरल उत्तर की तरह दिखता है VBoxVMService । मैंने अभी तक इसकी कोशिश नहीं की है, मैं यहाँ आने के लिए याद रखने की कोशिश करूँगा और अगर / जब करूँगा तो उत्तर को अपडेट करूँगा।


1
हालांकि यह 4.2.x के साथ काम नहीं करता है
आर्किमिडीज ट्रेजानो

2
@ArchimedesTrajano मैंने वर्चुअलबॉक्स 4.3.6 के साथ वर्तमान संस्करण (4.1) की कोशिश की है और यह अच्छी तरह से चलता है। परियोजना के पृष्ठ का दावा है कि यह "खरोंच से लगभग फिर से लिखा गया " था ।
मेलेबियस

1
हाँ, मैं कल रात इसे परीक्षण किया और यह काम करता है! बस याद रखें
आर्किमिडीज ट्रेजानो

4

VBoxVMService पर सहमत हुए। यह स्थापित करना वास्तव में आसान है और लगता है कि यह अच्छी तरह से काम कर रहा है। आप इसे यहां स्थापित करने का तरीका जान सकते हैं:

http://www.windows-noob.com/forums/index.php?/topic/4931-have-virtualbox-vms-start-as-a-service-on-a-windows-host/

**** संपादित करें **** नीचे दिए गए अनुरोध के अनुसार, लिंक का सारांश। यद्यपि समाधान ने मेरे लिए काम किया, इसका श्रेय पीटर अपफ़ोल्ड को जाता है - http://peter.upfold.org.uk/

  • Virtualbox स्थापित करें और RDP सत्रों को स्वीकार करने के लिए VM सेटअप करें।
  • VBoxVmService को C: \ vms में डाउनलोड और इंस्टॉल करें। डाउनलोड लिंक के लिए बस Google VBoxVmService (क्षमा करें, 2 से अधिक लिंक पोस्ट करने के लिए पर्याप्त प्रतिनिधि नहीं)।
  • C: \ vms के अंतर्गत VBoxVmService की आईएनआई फ़ाइल संपादित करें:

[समायोजन]

ServiceName = VBoxVmService

VBOX_USER_HOME = C: \ Users \ Administrator.VirtualBox

RunAsUser =। \ प्रशासक

UserPassword = enteryourpasswordhere

RunWebService = नहीं

PauseShutdown = 5000

[Vm0] VmName = VirtualBox में vm का नाम

ShutdownMethod = savestate

ऑटोस्टार्ट = हाँ

  • VBOX_USER_HOME में .VirtualBox फ़ोल्डर के साथ सही उपयोगकर्ता के होम डायरेक्टरी में, साथ ही RunAsUser और UserPassword निर्देशों के साथ, और VmName में वर्चुअल मशीन में लक्ष्य वर्चुअल मशीन का नाम सेट करें। मशीन बूट होने पर शुरू करने के लिए आप अन्य आभासी मशीनों के साथ [Vm0] के बाद अतिरिक्त [Vmx] अनुभाग भी जोड़ सकते हैं।

  • जब आप अपने कॉन्फ़िगरेशन से खुश होते हैं, तो एक प्रशासक-सक्षम कमांड प्रॉम्प्ट से, सेवा को स्थापित करने के लिए निम्न कमांड चलाएँ। एक बार सेवा स्थापित हो जाने के बाद, आप अपने उपयोगकर्ता पासवर्ड को INI फ़ाइल से हटा सकते हैं, क्योंकि यह सेवा कॉन्फ़िगरेशन में सहेजा गया है:

C: \ vms \ VmServiceControl.exe -i

  • अब, आपको पहली बार सेवा शुरू करने का प्रयास करने से पहले कंप्यूटर को रिबूट करना होगा, या यह वीएम का पता लगाने में असमर्थ होगा।

  • रिबूट होने पर, सेवा शुरू होनी चाहिए ('स्वचालित (विलंबित प्रारंभ)' देरी के अधीन) और आपके वीएम बूट पर शुरू हो जाएंगे।


1
यदि यह मृत हो जाता है तो क्या आप अपने जवाब के भीतर लिंक को संक्षेप में बता सकते हैं?
jonsca

अनुरोध के अनुसार पोस्ट संपादित की गई।
रूईविल्ली

VirtualBox के 4.2.x संस्करण पर यह काम करता है?
आर्किमिडीज ट्रैजानो सेप

ये निर्देश शायद कुछ पुराने संस्करण पर लागू होते हैं, VBoxVmService (4.1) का वर्तमान संस्करण स्थापित करना आसान है और यह आपको प्रक्रिया के माध्यम से मार्गदर्शन करेगा।
मेलेबियस

2

बस इसे दूसरे विकल्प के रूप में पेश कर रहा है:

सेवा बनाने के लिए बिल्ट विंडोज कमांड 'sc' का प्रयोग करें। इसे ine vboxheadless ’के साथ मिलाएं आपको वह स्थान मिलेगा जहां आप होना चाहते हैं।

विशेष रूप से vboxheadless के साथ अनुपलब्ध, लेकिन मैंने एक परीक्षण सेवा बनाई जो calc.exe चलाता है। आपको कुछ इस तरह करना चाहिए:

sc create servicenamehere start= auto binPath= "C:\path\to\vboxheadless.exe --startvm name"

अधिक जानकारी के लिए sc के लिए प्रलेखन देखें। नोट: समान चिह्न के बाद के रिक्त स्थान जानबूझकर हैं।


यह सेवा को सही ढंग से शुरू करेगा, लेकिन सेवा बंद होने पर VM को क्रैश कर देगा - VBoxHeadless सही ढंग से सेवा रोक नियंत्रण की व्याख्या नहीं कर सकता है, इसलिए विंडोज टाइमआउट तक इंतजार करेगा और फिर जबरन प्रक्रिया को मार देगा, जो आदर्श से कम है। ऐसा होने से रोकने के लिए रैपर स्क्रिप्ट के अन्य उत्तर देखें।
हारून मिलर

टिप्पणी के लिए धन्यवाद। उम्मीद है, यह डेवलपर्स को बग फिक्स / सुविधा अनुरोध के रूप में प्रस्तुत किया गया है।
हारून कोपले

1

यदि vboxd स्क्रिप्ट आपको उतनी ही परेशानी दे रही है जितनी उन्होंने मुझे दी थी, तो आप यह कोशिश करना चाहें; यह एक सरल समाधान है, जिसे पर्ल में लागू किया गया है, जो समान कार्यक्षमता प्रदान करता है। विशेष रूप से, वीएम सिस्टम के साथ शुरू होता है (यह मानते हुए कि सेवा स्वचालित रूप से शुरू करने के लिए सेट है, जो डिफ़ॉल्ट है), और सेवा बंद होने पर सफाई से नीचे चला जाता है।

मेरे अनुभव से निपटने के लिए काफी सरल होने के कारण, vboxd समाधान के प्रमुख अंतर, यह है कि यह स्क्रिप्ट VBoxHeadless के लिए एक वीआरडीई पोर्ट सेटिंग पास नहीं करता है, और यह कि वीएम शटडाउन को "सेवरिपेट" के बजाय "एसीपीपॉवरटन" के माध्यम से नियंत्रित किया जाता है। ।

यदि यह आपके उद्देश्यों के अनुरूप नहीं है, तो इसे बदलना काफी आसान है; पहले मामले में, VBoxHeadless कमांड लाइन स्ट्रिंग ($ cmd) में '-e "टीसीपी / पोर्ट्स = [, पोर्ट ...]" "जोड़ें और दूसरे मामले में," एसपीपॉवरबटन "को" सेवेस्टेट "में बदलें। SIGTERM हैंडलर।

यहाँ पर्ल स्क्रिप्ट है:

 #!/usr/bin/perl
 # Service wrapper for VirtualBox VM.

 use strict;


 # Windows-style path pointing to your VirtualBox home directory
 # (i.e., where your VirtualBox.xml lives)
 my $vboxhome = 'c:\\Documents and Settings\\Aaron\\.VirtualBox';

 # Cygwin path pointing to the VirtualBox install directory
 my $vboxpath = '/cygdrive/c/Program Files/Oracle/VirtualBox';

 # Name or UUID of your virtual machine
 my $vmname = '{83dfb4b1-4243-4a07-9d37-9df5573792d8}';

 $ENV{'VBOX_USER_HOME'} = $vboxhome;

 my $exit_handler = sub {
    print "Caught SIGTERM; shutting down VM.\n";
    exec("'$vboxpath/VBoxManage.exe' controlvm $vmname acpipowerbutton");
 };

 $SIG{TERM} = $exit_handler;

 print "[debug] pid $$\n";

 # Command line for VBoxHeadless - add your VRDE port here if you want one
 my $cmd = "'$vboxpath/VBoxHeadless.exe' --startvm $vmname 2>&1 1>/dev/null";
 print "[debug] $cmd\n";
 system($cmd);

 print "VM died unexpectedly; exiting.\n";

और यहाँ पर cygrunsrv कमांड लाइन है जिसका उपयोग मैंने विंडोज सेवा को स्थापित करने के लिए किया था:

 cygrunsrv --install '<service-name>' --desc '<description>' \
  --path '/usr/bin/perl' --args '<full-path-to-service-script>' \
  --chdir '<path-to-service-script-dir>' --termsig TERM --shutsig TERM \
  --preshutdown --interactive

वहां से, यह केवल 'sc start <सेवा-नाम>' जारी करने का मामला होना चाहिए, और आपको जाने के लिए अच्छा होना चाहिए - यह याद रखें कि, डिफ़ॉल्ट रूप से, cygrunsrv सेवाएँ लॉग / var / log / <सेवा-नाम> में लॉग इन करती हैं .log, इसलिए अगर कुछ भी गलत व्यवहार करता है, तो वह पहली जगह है जो एक कारण की तलाश में है।

एक बात का ध्यान रखें कि, जब आप VM को इस तरह से चलाते हैं, तो यह आपके स्वयं के बजाय अंतर्निहित सिस्टम खाते के तहत चलेगा। यह मामला होने के नाते, आप VMBox को वर्चुअलबॉक्स कंसोल के माध्यम से प्रबंधित नहीं कर पाएंगे, जबकि यह एक सेवा के रूप में चल रहा है; यह "संचालित बंद" स्थिति में प्रतीत होगा, और आप इसकी सेटिंग में नहीं जा पाएंगे। (एक सेवा के रूप में चलने के दौरान वीएम पर बिजली की कोशिश करना अनुशंसित नहीं है - मुझे नहीं पता कि क्या होगा, लेकिन सबसे अच्छा यह एक नो-ऑप होगा, और सबसे खराब रूप से यह आपके वीएम को नली देगा।) यदि आपको वीएम की सेटिंग्स को बदलने या कंसोल तक पहुंचने की आवश्यकता है, तो पहले सेवा को रोकें (और बाहर निकलने के लिए VBoxHeadless.exe की प्रतीक्षा करें), और फिर इसे कॉन्फ़िगर करें / वर्चुअलबॉक्स कंसोल में इसे पावर करें जैसा कि आप सामान्य रूप से करेंगे।

आप शायद वर्चुअलबॉक्स कंसोल को चलाने के लिए दूसरी इंटरेक्टिव सेवा स्थापित करके इस समस्या को हल कर सकते हैं; चूंकि वह कंसोल को सिस्टम खाते के तहत भी चलाएगा, इसलिए यह संभवतः चल रहे वीएम को देखने और प्रबंधित करने में सक्षम होगा। मुझे खुद ऐसा करने की आवश्यकता नहीं थी, इसलिए मुझे यकीन नहीं है कि यह काम करेगा, लेकिन मुझे ऐसा नहीं लगता है। (यदि आप इसे आज़माते हैं, तो मैं इस उत्तर के लिए एक टिप्पणी की सराहना करूँगा, मुझे बताएं कि यह आपके लिए कैसे काम करता है। धन्यवाद!)

उम्मीद है की यह मदद करेगा!


आपकी स्क्रिप्ट सरल है, लेकिन पर्ल और हार्ड-कोड के लिए कई गुणों की आवश्यकता होती है जो vboxd स्क्रिप्ट पैरामीटर के रूप में स्वीकार करता है। के अनुसार virtualbox.org/manual/ch07.html , वीआरडीई बंदरगाह को स्वीकार नहीं द्वारा, VBoxHeadless वी एम (यह सिर्फ ब्लॉकों अनिश्चित काल के लिए) नहीं चलेंगे वीएम डिफ़ॉल्ट पोर्ट है जो एक और आरडीपी सर्वर का उपयोग कर रहा है उपयोग करने के लिए सेट किया गया है। vboxd-installमददगार है क्योंकि यह आसानी से cygrunsrv के तर्क विवरण को छुपाता है। मैं सहमत हूँ, हालांकि, acpipowerbuttonयह एक बेहतर "स्टॉप" विकल्प है savestate
डेरेक महार

@DerekMahar इसे ले लो जो भी इसके लायक है, मुझे लगता है। चूंकि यह XP की तुलना में कुछ भी नया काम नहीं करता है, मुझे संदेह है कि यह किसी भी मामले में पूरी तरह से है। ¯ \ _ (ツ) _ /! प्रतिक्रिया के लिए धन्यवाद!
हारून मिलर

हारून मिलर, क्या आपका मतलब है कि आपकी स्क्रिप्ट या vboxd XP की तुलना में किसी भी नए विंडोज पर काम नहीं करता है? मुझे लगता है कि आप अपनी स्क्रिप्ट का मतलब है क्योंकि मैं VirtualBox 5.1.6 के साथ विंडोज 10 पर काम करने के लिए vboxd मिला है।
डेरेक महार

@DerekMahar का मतलब है मेरी स्क्रिप्ट, न कि vboxd।
एरोन मिलर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.