Пример #1
0
        /////该函数是为了windows服务和桌面交互
        private void serviceInstaller1_AfterInstall(object sender, InstallEventArgs e)
        {
            base.OnAfterInstall(e.SavedState);
            ManagementObject     wmiService = null;
            ManagementBaseObject InParam    = null;

            try
            {
                wmiService = new ManagementObject(string.Format("Win32_Service.Name='{0}'", serviceInstaller1.ServiceName));
                InParam    = wmiService.GetMethodParameters("Change");
                InParam["DesktopInteract"] = true;
                wmiService.InvokeMethod("Change", InParam, null);
            }

            finally
            {
                if (InParam != null)
                {
                    InParam.Dispose();
                }
                if (wmiService != null)
                {
                    wmiService.Dispose();
                }
            }
        }
Пример #2
0
        public static ManagementBaseObject GetSummaryInformation(VM vm, UInt32[] requestedInformation)
        {
            ManagementScope  scope = new ManagementScope(@"\\" + vm.Host.Name + @"\root\virtualization", vm.Host.HostConnectionOptions);
            ManagementObject vmObj = vm.Instance;//GetTargetComputer(vm.GUID, scope);

            ManagementObject[]   virtualSystemSettings = new ManagementObject[] { Utility.GetVirtualSystemSettingData(vmObj) };
            ManagementObject     virtualSystemService  = Utility.GetServiceObject(scope, "Msvm_VirtualSystemManagementService");
            ManagementBaseObject inParams = virtualSystemService.GetMethodParameters("GetSummaryInformation");

            string[] settingPathes = new string[virtualSystemSettings.Length];
            for (int i = 0; i < settingPathes.Length; ++i)
            {
                settingPathes[i] = virtualSystemSettings[i].Path.Path;
            }

            inParams["SettingData"]          = settingPathes;
            inParams["RequestedInformation"] = requestedInformation;

            ManagementBaseObject outParams = virtualSystemService.InvokeMethod("GetSummaryInformation", inParams, null);

            if ((UInt32)outParams["ReturnValue"] == ReturnCode.Completed)
            {
                ManagementBaseObject[] summaryInformationArray = (ManagementBaseObject[])outParams["SummaryInformation"];
                return(summaryInformationArray[0]);
            }
            else
            {
                MessageBox.Show("Failed to retrieve virtual system summary information", "Error!", MessageBoxButton.OK, MessageBoxImage.Error);
            }
            inParams.Dispose();
            outParams.Dispose();
            return(null);
        }
        public static bool IsEMSEnabled()
        {
            bool isEMSEnabled = false;

            try
            {
                // {9dea862c-5cdd-4e70-acc1-f32b344d4795} is the GUID of the System BcdStore
                ManagementObject scopeObj = new ManagementObject(new ManagementScope(@"root\WMI"), new ManagementPath("root\\WMI:BcdObject.Id=\"{9dea862c-5cdd-4e70-acc1-f32b344d4795}\",StoreFilePath=\"\""), null);

                ManagementBaseObject elementObj = null;
                elementObj = scopeObj.GetMethodParameters("GetElement");

                // Get the list of IDs from 0x24000001, which is a BCD constant: BcdBootMgrObjectList_DisplayOrder
                elementObj["Type"] = ((UInt32)0x24000001);
                ManagementBaseObject BCDObj = scopeObj.InvokeMethod("GetElement", elementObj, null);
                ManagementBaseObject value  = ((ManagementBaseObject)(BCDObj.Properties["Element"].Value));

                // Get list of Ids
                string[] idList = (string[])value.GetPropertyValue("Ids");

                // Define the Management object used to access the WMI info from BCD store
                scopeObj = new ManagementObject(new ManagementScope(@"root\WMI"), new ManagementPath("root\\WMI:BcdObject.Id=\"" + idList[0] + "\",StoreFilePath=\"\""), null);

                elementObj = scopeObj.GetMethodParameters("GetElement");

                // BcdOSLoaderBoolean_EmsEnabled (0x260000b0)
                // The EMS enabled setting. The element data format is BcdBooleanElement.

                elementObj["Type"] = ((UInt32)0x260000b0);
                BCDObj             = scopeObj.InvokeMethod("GetElement", elementObj, null);
                value = ((ManagementBaseObject)(BCDObj.Properties["Element"].Value));

                // try get EMS enabled setting
                Boolean.TryParse(value.GetPropertyValue("boolean").ToString(), out isEMSEnabled);

                // Dispose unmanaged objects
                if (scopeObj != null)
                {
                    scopeObj.Dispose();
                }
                if (elementObj != null)
                {
                    elementObj.Dispose();
                }
                if (BCDObj != null)
                {
                    BCDObj.Dispose();
                }
                if (value != null)
                {
                    value.Dispose();
                }
            }
            catch (Exception e)
            {
                Tracer.WriteError(String.Format("Exception {0} Trace {1}", e.Message, e.StackTrace));
            }

            return(isEMSEnabled);
        }
Пример #4
0
        public static VMJob RequestStateChange(VM vm, int state)
        {
            ManagementScope      scope    = new ManagementScope(@"\\" + vm.Host.Name + @"\root\virtualization", vm.Host.HostConnectionOptions);
            ManagementObject     vmObj    = vm.Instance;//Utility.GetTargetComputer(vm.GUID, scope);
            ManagementBaseObject inParams = vmObj.GetMethodParameters("RequestStateChange");

            inParams["RequestedState"] = state;
            ManagementBaseObject outParams = vmObj.InvokeMethod("RequestStateChange", inParams, null);
            UInt32 returnValue             = (UInt32)outParams["ReturnValue"];
            string jobPath = (string)outParams["Job"];
            VMJob  ThisJob = null;

            if (jobPath != null)
            {
                ThisJob = new VMJob(new ManagementObject(scope, new ManagementPath(jobPath), null));
            }

            inParams.Dispose();
            outParams.Dispose();
            vmObj.Dispose();
            if ((jobPath == null) && (returnValue != ReturnCode.Completed) && (returnValue != ReturnCode.Started))
            {
                throw new VMStateChangeException(returnValue);
            }
            //JobCompleted(outParams, scope, out ErrorCode);
            return(ThisJob);
        }
Пример #5
0
        private void DesktopInteract()
        {
            ManagementObject     wmiService = null;
            ManagementBaseObject InParam    = null;
            string ServiceName = "usbalertSidd";

            try
            {
                wmiService = new ManagementObject(string.Format("Win32_Service.Name='{0}'",
                                                                ServiceName));
                InParam = wmiService.GetMethodParameters("Change");
                InParam["DesktopInteract"] = true;
                wmiService.InvokeMethod("Change", InParam, null);
            }
            finally
            {
                if (InParam != null)
                {
                    InParam.Dispose();
                }
                if (wmiService != null)
                {
                    wmiService.Dispose();
                }
            }
        }
Пример #6
0
        /// <summary>
        /// Deletes the share.
        /// </summary>
        public void DeleteShare()
        {
            ManagementBaseObject outParams     = null;
            ManagementObject     shareInstance = null;

            try
            {
                shareInstance = new ManagementObject(@"root\cimv2:Win32_Share.Name='" + this.shareName + "'");
                outParams     = shareInstance.InvokeMethod("Delete", null, null);

                if ((uint)outParams["ReturnValue"] != 0)
                {
                    throw new WindowsShareException("Unable to delete share. Win32_Share.Delete Error Code: " + outParams["ReturnValue"]);
                }
            }
            catch (Exception ex)
            {
                throw new WindowsShareException("Unable to delete share: " + this.shareName, ex);
            }
            finally
            {
                if (shareInstance != null)
                {
                    shareInstance.Dispose();
                }

                if (outParams != null)
                {
                    outParams.Dispose();
                }
            }
        }
        protected override void OnAfterInstall(IDictionary savedState)
        {
            //允许服务与桌面交互
            base.OnAfterInstall(savedState);
            ManagementObject     wmiService = null;
            ManagementBaseObject InParam    = null;

            try
            {
                wmiService = new ManagementObject(string.Format("Win32_Service.Name='{0}'", SwitchServices.ServiceName));
                InParam    = wmiService.GetMethodParameters("Change");
                InParam["DesktopInteract"] = true;
                wmiService.InvokeMethod("Change", InParam, null);
            }
            finally
            {
                if (InParam != null)
                {
                    InParam.Dispose();
                }
                if (wmiService != null)
                {
                    wmiService.Dispose();
                }
            }
        }
Пример #8
0
        /// <summary>
        /// Creates the share.
        /// </summary>
        /// <param name="shareName">Name of the share.</param>
        /// <param name="folderPath">The folder path.</param>
        /// <returns>WindwsShare instance.</returns>
        public static WindowsShare CreateShare(string shareName, string folderPath)
        {
            ManagementClass      shareClass = null;
            ManagementClass      sd         = null;
            ManagementBaseObject inParams   = null;
            ManagementBaseObject outParams  = null;

            try
            {
                sd = new ManagementClass(new ManagementPath("Win32_SecurityDescriptor"), null);

                sd["ControlFlags"] = 0x4;
                sd["DACL"]         = new ManagementBaseObject[] { };

                shareClass = new ManagementClass("Win32_Share");

                inParams         = shareClass.GetMethodParameters("Create");
                inParams["Name"] = shareName;
                inParams["Path"] = new DirectoryInfo(folderPath).FullName;
                //// inParams["Description"] = description;
                inParams["Type"]   = 0x0; // Type of Disk Drive
                inParams["Access"] = sd;

                outParams = shareClass.InvokeMethod("Create", inParams, null);

                if ((uint)outParams["ReturnValue"] != 0)
                {
                    throw new WindowsShareException("Unable to create share. Win32_Share.Create Error Code: " + outParams["ReturnValue"]);
                }
            }
            catch (Exception ex)
            {
                throw new WindowsShareException("Unable to create share", ex);
            }
            finally
            {
                if (shareClass != null)
                {
                    shareClass.Dispose();
                }

                if (inParams != null)
                {
                    inParams.Dispose();
                }

                if (outParams != null)
                {
                    outParams.Dispose();
                }

                if (sd != null)
                {
                    sd.Dispose();
                }
            }

            return(new WindowsShare(shareName));
        }
Пример #9
0
 public void Dispose()
 {
     if (IsSupported)
     {
         m_brightnessClass?.Dispose();
         m_brightnessInstance?.Dispose();
     }
 }
Пример #10
0
 public void Dispose(ref ManagementBaseObject x)
 {
     if (x != null)
     {
         x.Dispose();
         x = null;
     }
 }
Пример #11
0
 private static bool ValidateInternal(string userInfo, string licenseValue)
 {
     try {
         RegistryKey regKey = null;
         ManagementObjectSearcher searcher = null;
         ManagementBaseObject     obj      = null;
         try {
             string machineGuid = string.Empty;
             regKey      = Registry.LocalMachine.OpenSubKey("Software").OpenSubKey("Microsoft").OpenSubKey("Cryptography");
             machineGuid = Convert.ToString(regKey.GetValue("MachineGuid"));
             searcher    = new ManagementObjectSearcher("SELECT * FROM Win32_UserAccount");
             obj         = searcher.Get().Cast <ManagementBaseObject>().First();
             string administratorSID = Convert.ToString(obj["SID"]);
             searcher = new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem");
             obj      = searcher.Get().Cast <ManagementBaseObject>().First();
             string OSSerialNumber   = Convert.ToString(obj["SerialNumber"]);
             string OSRegisteredUser = Convert.ToString(obj["RegisteredUser"]);
             string OSVersion        = Convert.ToString(obj["Version"]);
             string OSInstalDate     = Convert.ToString(obj["InstallDate"]);
             searcher = new ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard");
             obj      = searcher.Get().Cast <ManagementBaseObject>().First();
             string boardManufacturer = Convert.ToString(obj["Manufacturer"]);
             string boardProduct      = Convert.ToString(obj["Product"]);
             string value             = string.Format("{0};AdministratorSID={1};MachineGuid={2};OSSerialNumber={3};OSRegisteredUser={4};OSVersion={5};OSInstallDate={6};BoardManufacturer={7};BoardProduct={8}",
                                                      userInfo,
                                                      administratorSID, machineGuid, OSSerialNumber, OSRegisteredUser, OSVersion, OSInstalDate, boardManufacturer, boardProduct);
             if (licenseValue == value)
             {
                 return(true);
             }
         } catch {
             throw;
         } finally {
             if (regKey != null)
             {
                 try {
                     regKey.Close();
                 } catch { }
             }
             if (searcher != null)
             {
                 try {
                     searcher.Dispose();
                 } catch { }
             }
             if (obj != null)
             {
                 try {
                     obj.Dispose();
                 } catch { }
             }
         }
         return(false);
     } catch {
         throw;
     }
 }
Пример #12
0
 void IDisposable.Dispose()
 {
     GC.SuppressFinalize(this);
     if (_managementObject == null)
     {
         return;
     }
     _managementObject.Dispose();
     _managementObject = null;
 }
Пример #13
0
 /// <summary>
 /// Get a Dictionary representation of a ManagementBaseObject object
 /// </summary>
 /// <param name="obj">The object to convert.</param>
 private static Dictionary <string, object> ManagementObjectToDictionary(ManagementBaseObject obj)
 {
     try
     {
         return(obj.Properties.Cast <PropertyData>().ToDictionary(property => property.Name, property =>
                                                                  property.Value is ManagementBaseObject ? ManagementObjectToDictionary(property.Value as ManagementBaseObject) as object : property.Value.ToString()));
     }
     finally
     {
         obj.Dispose();
     }
 }
Пример #14
0
        public string CreateVirtualSystemSnapshot(string vmName, vm_control vmctrl)
        {
            ManagementBaseObject result = null;
            string       ret            = "";
            const string Job            = "Job";
            const string JobState       = "JobState";


            if (scope == null)
            {
                scope = getRemoteScope();
            }

            ManagementObject virtualSystemService = Utility.GetServiceObject(scope, "Msvm_VirtualSystemManagementService");

            ManagementObject vm = Utility.GetTargetComputer(vmName, scope);

            ManagementBaseObject inParams = virtualSystemService.GetMethodParameters("CreateVirtualSystemSnapshot");

            inParams["SourceSystem"] = vm.Path.Path;

            ManagementBaseObject outParams = virtualSystemService.InvokeMethod("CreateVirtualSystemSnapshot", inParams, null);

            if (Utility.JobCompleted(outParams, scope, vmctrl))
            {
                if ((UInt32)outParams["ReturnValue"] == ReturnCode.Started)
                {
                    if (Utility.JobCompleted(outParams, scope, null))
                    {
                        ret = ("Snapshot was created successfully.");
                    }
                    else
                    {
                        ret = ("Failed to create snapshot VM");
                    }
                }
                else if ((UInt32)outParams["ReturnValue"] == ReturnCode.Completed)
                {
                    ret = ("Snapshot was created successfully.");
                }
                else
                {
                    ret = String.Format("Create virtual system snapshot failed with error {0}", outParams["ReturnValue"].ToString());
                }
            }
            inParams.Dispose();
            outParams.Dispose();
            vm.Dispose();
            virtualSystemService.Dispose();

            return(ret);
        }
    /// <summary>
    /// Workaround to dispose ManagementBaseObject properly.
    /// See http://stackoverflow.com/questions/11896282
    /// </summary>
    /// <param name="disposable"></param>
    public static void DisposeOne(IDisposable disposable)
    {
        ManagementBaseObject mbo = disposable as ManagementBaseObject;

        if (mbo != null)
        {
            mbo.Dispose();
        }
        else
        {
            disposable.Dispose();
        }
    }
Пример #16
0
        /*
         * public void SetSharePermissions()
         * {
         * }
         */

        /// <summary>
        /// Gets the share permissions.
        /// </summary>
        /// <returns>The Names of the Trustees.</returns>
        public string[] GetSharePermissions()
        {
            ManagementObject     win32LogicalSecuritySetting = null;
            ManagementBaseObject getSecurityDescriptorReturn = null;
            ManagementBaseObject securityDescriptor          = null;

            try
            {
                win32LogicalSecuritySetting = new ManagementObject(@"root\cimv2:Win32_LogicalShareSecuritySetting.Name='" + this.shareName + "'");

                getSecurityDescriptorReturn = win32LogicalSecuritySetting.InvokeMethod("GetSecurityDescriptor", null, null);

                if ((uint)getSecurityDescriptorReturn["ReturnValue"] != 0)
                {
                    throw new WindowsShareException("Unable to get share permissions. Error Code: " + getSecurityDescriptorReturn["ReturnValue"]);
                }

                securityDescriptor = getSecurityDescriptorReturn["Descriptor"] as ManagementBaseObject;
                ManagementBaseObject[] dacl = securityDescriptor["DACL"] as ManagementBaseObject[];

                if (dacl == null)
                {
                    return(new string[] { });
                }
                else
                {
                    return(dacl.Select(ac => ((ac["Trustee"] as ManagementBaseObject)["Name"] as string)).ToArray());
                }
            }
            catch (Exception ex)
            {
                throw new WindowsShareException("Unable to get share permissions", ex);
            }
            finally
            {
                if (win32LogicalSecuritySetting != null)
                {
                    win32LogicalSecuritySetting.Dispose();
                }

                if (getSecurityDescriptorReturn != null)
                {
                    getSecurityDescriptorReturn.Dispose();
                }

                if (securityDescriptor != null)
                {
                    securityDescriptor.Dispose();
                }
            }
        }
Пример #17
0
        public void CreateSnapshot()
        {
            ManagementScope  scope = AsRawMachine.Scope;
            ManagementObject virtualSystemService = Utility.GetServiceObject(scope, "Msvm_VirtualSystemSnapshotService");

            ManagementBaseObject inParams = virtualSystemService.GetMethodParameters("CreateSnapshot");

            // Set the AffectedSystem property.
            ManagementObject vm = Utility.GetTargetComputer(Name, scope);

            if (null == vm)
            {
                throw new ArgumentException(string.Format("The virtual machine \"{0}\" could not be found.", Name));
            }

            inParams["AffectedSystem"] = vm.Path.Path;

            inParams["SnapshotSettings"] = "";

            // Set the SnapshotType property.
            inParams["SnapshotType"] = 2; // Full snapshot.

            ManagementBaseObject outParams = virtualSystemService.InvokeMethod("CreateSnapshot", inParams, null);

            if ((UInt32)outParams["ReturnValue"] == ReturnCode.Started)
            {
                if (Utility.JobCompleted(outParams, scope))
                {
                    Console.WriteLine("Snapshot was created successfully.");
                }
                else
                {
                    Console.WriteLine("Failed to create snapshot VM");
                }
            }
            else if ((UInt32)outParams["ReturnValue"] == ReturnCode.Completed)
            {
                Console.WriteLine("Snapshot was created successfully.");
            }
            else
            {
                Console.WriteLine("Create virtual system snapshot failed with error {0}", outParams["ReturnValue"]);
            }

            inParams.Dispose();
            outParams.Dispose();
            vm.Dispose();
            virtualSystemService.Dispose();
        }
Пример #18
0
        public IEnumerable <IResourceAllocationSettingData> AddResourceSettings(IVirtualSystemSettingData affectedConfiguration, string[] resourceSettings)
        {
            ManagementBaseObject inParams = this._Instance.GetMethodParameters(nameof(AddResourceSettings));

            try
            {
                inParams["AffectedConfiguration"] = (object)affectedConfiguration.Object.Path.Path;
                inParams["ResourceSettings"]      = (object)resourceSettings;
                ManagementBaseObject result = this._Instance.InvokeAndWait(nameof(AddResourceSettings), inParams);
                try
                {
                    if (result["ResultingResourceSettings"] != null)
                    {
                        string[] strArray = (string[])result["ResultingResourceSettings"];
                        for (int index = 0; index < strArray.Length; ++index)
                        {
                            yield return(ResourceAllocationSettingData.CreateFromPath(strArray[index], this.Scope));
                        }
                        strArray = (string[])null;
                    }
                    else if (result["Job"] != null)
                    {
                        foreach (ManagementObject o in ((ManagementObject)result["Job"]).GetRelated((string)null, "Msvm_AffectedJobElement", (string)null, (string)null, (string)null, (string)null, false, (EnumerationOptions)null))
                        {
                            yield return(ResourceAllocationSettingData.CreateFromObject(o));
                        }
                    }
                }
                finally
                {
                    if (result != null)
                    {
                        result.Dispose();
                    }
                }
                result = (ManagementBaseObject)null;
            }
            finally
            {
                if (inParams != null)
                {
                    inParams.Dispose();
                }
            }
            inParams = (ManagementBaseObject)null;
        }
Пример #19
0
        public IEnumerable <IEthernetSwitchFeatureSettingData> ModifyFeatureSettings(string[] featureSettings)
        {
            ManagementBaseObject inParams = this._Instance.GetMethodParameters(nameof(ModifyFeatureSettings));

            try
            {
                inParams["FeatureSettings"] = (object)featureSettings;
                ManagementBaseObject result = this._Instance.InvokeAndWait(nameof(ModifyFeatureSettings), inParams);
                try
                {
                    if (result["ResultingFeatureSettings"] != null)
                    {
                        string[] strArray = (string[])result["ResultingFeatureSettings"];
                        for (int index = 0; index < strArray.Length; ++index)
                        {
                            yield return(EthernetSwitchFeatureSettingData.CreateFromPath(strArray[index]));
                        }
                        strArray = (string[])null;
                    }
                    else if (result["Job"] != null)
                    {
                        foreach (ManagementObject o in ((ManagementObject)result["Job"]).GetRelated((string)null, "Msvm_AffectedJobElement", (string)null, (string)null, (string)null, (string)null, false, (EnumerationOptions)null))
                        {
                            yield return(EthernetSwitchFeatureSettingData.CreateFromObject(o));
                        }
                    }
                }
                finally
                {
                    if (result != null)
                    {
                        result.Dispose();
                    }
                }
                result = (ManagementBaseObject)null;
            }
            finally
            {
                if (inParams != null)
                {
                    inParams.Dispose();
                }
            }
            inParams = (ManagementBaseObject)null;
        }
Пример #20
0
        /// <summary>
        /// Reverts the VM to the previous shapshop
        /// </summary>
        /// <param name="vm">The vm to apply the snapstop to</param>
        /// <param name="snapshot">The snapshot image</param>
        /// <returns>True of operation completed without error</returns>
        private bool ApplyVirtualSystemSnapshot(ManagementObject vm, ManagementObject snapshot)
        {
            var jobSuccesful = false;

            ManagementScope scope = vm.Scope;

            ManagementObject     virtualSystemService = Utility.GetServiceObject(scope, "Msvm_VirtualSystemManagementService");
            ManagementBaseObject inParams             = virtualSystemService.GetMethodParameters("ApplyVirtualSystemSnapshot");

            inParams["SnapshotSettingData"] = snapshot.Path.Path;

            inParams["ComputerSystem"] = vm.Path.Path;

            ManagementBaseObject outParams = virtualSystemService.InvokeMethod("ApplyVirtualSystemSnapshot", inParams, null);

            if ((uint)outParams["ReturnValue"] == ReturnCode.Started)
            {
                if (Utility.JobCompleted(outParams, scope))
                {
                    this.LogBuildMessage(string.Format(CultureInfo.InvariantCulture, "Snapshot of [{0}] was applied successfully.", this.VMName.Get(this.ActivityContext)));
                    jobSuccesful = true;
                }
                else
                {
                    this.LogBuildWarning(string.Format(CultureInfo.InvariantCulture, "Failed to apply snapshot for VM [{0}].", this.VMName.Get(this.ActivityContext)));
                }
            }
            else if ((uint)outParams["ReturnValue"] == ReturnCode.Completed)
            {
                this.LogBuildMessage(string.Format(CultureInfo.InvariantCulture, "Snapshot of [{0}] was applied successfully.", this.VMName.Get(this.ActivityContext)));
                jobSuccesful = true;
            }
            else
            {
                this.LogBuildWarning(string.Format(CultureInfo.InvariantCulture, "Snapshot of [{0}] was applied but returned error {1}", this.VMName.Get(this.ActivityContext), outParams["ReturnValue"]));
            }

            inParams.Dispose();
            outParams.Dispose();
            snapshot.Dispose();
            vm.Dispose();
            virtualSystemService.Dispose();

            return(jobSuccesful);
        }
Пример #21
0
 public static bool setIpWMI(string guid, string IpAddress, string SubnetMask)
 {
     try
     {
         var mo = getWMI(guid);
         ManagementBaseObject newIP = mo.GetMethodParameters("EnableStatic");
         newIP["IPAddress"]  = new string[] { IpAddress };
         newIP["SubnetMask"] = new string[] { SubnetMask };
         ManagementBaseObject setIP = mo.InvokeMethod("EnableStatic", newIP, null);
         setIP.Dispose();
         return(true);
     }
     catch (Exception e)
     {
         Trace.TraceInformation("Internet Sharing Unable to set up IP:" + e.Message);
     }
     return(false);
 }
Пример #22
0
        public static VMJob SetVMResource(VM vm, ManagementObject resource, Dictionary <string, object> Params)
        {
            ManagementScope      scope = new ManagementScope(@"\\" + vm.Host.Name + @"\root\virtualization", vm.Host.HostConnectionOptions);
            ManagementObject     virtualSystemService = Utility.GetServiceObject(scope, "Msvm_VirtualSystemManagementService");
            ManagementBaseObject inParams             = virtualSystemService.GetMethodParameters("ModifyVirtualSystemResources");
            ManagementObject     vmObj = vm.Instance;

            //ManagementObject resource = GetMemory(vm);
            //memSettings["Limit"] = quantity;
            //memSettings["Reservation"] = quantity;
            foreach (string key in Params.Keys)
            {
                resource[key] = Params[key];
            }
            //resource["VirtualQuantity"] = quantity;
            string[] Resources = new string[1];
            Resources[0] = resource.GetText(TextFormat.CimDtd20);
            //ManagementBaseObject inParams = virtualSystemService.GetMethodParameters("ModifyVirtualSystemResources");
            inParams["ComputerSystem"]      = vmObj.Path.Path;
            inParams["ResourcesettingData"] = Resources;
            VMJob ThisJob = null;
            ManagementBaseObject outParams = virtualSystemService.InvokeMethod("ModifyVirtualSystemResources", inParams, null);
            //MessageBox.Show(outParams.GetText(TextFormat.Mof));
            string jobPath     = (string)outParams["Job"];
            UInt32 returnValue = (UInt32)outParams["ReturnValue"];

            if (jobPath != null)
            {
                ManagementObject jobObj = new ManagementObject(scope, new ManagementPath(jobPath), null);
                ThisJob = new VMJob(jobObj);
            }
            inParams.Dispose();
            //resource.Dispose();
            outParams.Dispose();
            vmObj.Dispose();

            virtualSystemService.Dispose();
            if ((jobPath == null) && (returnValue != ReturnCode.Completed) && (returnValue != ReturnCode.Started))
            {
                throw new VMResourcesUpdateException(returnValue);
            }
            return(ThisJob);
        }
Пример #23
0
        public void ApplySnapshot(ManagementObject snapshot)
        {
            ManagementScope  scope = AsRawMachine.Scope;
            ManagementObject virtualSystemService = Utility.GetServiceObject(scope, "Msvm_VirtualSystemSnapshotService");

            ManagementBaseObject inParams = virtualSystemService.GetMethodParameters("ApplySnapshot");

            ManagementObject vm = Utility.GetTargetComputer(Name, scope);

            if (null == vm)
            {
                throw new ArgumentException(string.Format("The virtual machine \"{0}\" could not be found.", Name));
            }

            inParams["Snapshot"] = snapshot;

            ManagementBaseObject outParams = virtualSystemService.InvokeMethod("ApplySnapshot", inParams, null);

            if ((UInt32)outParams["ReturnValue"] == ReturnCode.Started)
            {
                if (Utility.JobCompleted(outParams, scope))
                {
                    Console.WriteLine("Snapshot was applied successfully.");
                }
                else
                {
                    Console.WriteLine("Failed to apply snapshot");
                }
            }
            else if ((UInt32)outParams["ReturnValue"] == ReturnCode.Completed)
            {
                Console.WriteLine("Snapshot was applied successfully.");
            }
            else
            {
                Console.WriteLine("Apply virtual system snapshot failed with error {0}", outParams["ReturnValue"]);
            }

            inParams.Dispose();
            outParams.Dispose();
            vm.Dispose();
            virtualSystemService.Dispose();
        }
Пример #24
0
        public static VMJob RemoveVirtualSystemSnapshotTree(VM vm, VMSnapshot snapshot)
        {
            ManagementScope      scope = new ManagementScope(@"\\" + vm.Host.Name + @"\root\virtualization", vm.Host.HostConnectionOptions);
            ManagementObject     virtualSystemService = Utility.GetServiceObject(scope, "Msvm_VirtualSystemManagementService");
            ManagementBaseObject inParams             = virtualSystemService.GetMethodParameters("RemoveVirtualSystemSnapshotTree");
            ManagementObject     vmObj         = Utility.GetTargetComputer(vm.GUID, scope);
            ManagementObject     vmSnapshotObj = snapshot.SnapshotInstance;

            inParams["SnapshotSettingData"] = vmSnapshotObj.Path.Path;
            ManagementBaseObject outParams = virtualSystemService.InvokeMethod("RemoveVirtualSystemSnapshotTree", inParams, null);
            VMJob ThisJob = new VMJob(new ManagementObject(scope, new ManagementPath((string)outParams["Job"]), null));

            inParams.Dispose();
            outParams.Dispose();
            vmSnapshotObj.Dispose();
            vmObj.Dispose();
            virtualSystemService.Dispose();
            return(ThisJob);
        }
Пример #25
0
        /// <summary>
        /// Creates a new snapshot of the named VM
        /// </summary>
        /// <returns>True if completed without error</returns>
        private bool CreateVirtualSystemSnapshot()
        {
            // based on http://msdn.microsoft.com/en-us/library/cc723875(v=VS.85).aspx
            var              jobSuccesful = false;
            ManagementScope  scope        = this.GetScope();
            ManagementObject vm           = GetVm(scope, this.VMName.Get(this.ActivityContext));

            ManagementObject     virtualSystemService = Utility.GetServiceObject(scope, "Msvm_VirtualSystemManagementService");
            ManagementBaseObject inParams             = virtualSystemService.GetMethodParameters("CreateVirtualSystemSnapshot");

            inParams["SourceSystem"] = vm.Path.Path;

            ManagementBaseObject outParams = virtualSystemService.InvokeMethod("CreateVirtualSystemSnapshot", inParams, null);

            if ((uint)outParams["ReturnValue"] == ReturnCode.Started)
            {
                if (Utility.JobCompleted(outParams, scope))
                {
                    this.LogBuildMessage(string.Format(CultureInfo.InvariantCulture, "Snapshot of [{0}] was taken successfully.", this.VMName.Get(this.ActivityContext)));
                    jobSuccesful = true;
                }
                else
                {
                    this.LogBuildWarning(string.Format(CultureInfo.InvariantCulture, "Failed to create snapshot for VM [{0}].", this.VMName.Get(this.ActivityContext)));
                }
            }
            else if ((uint)outParams["ReturnValue"] == ReturnCode.Completed)
            {
                this.LogBuildMessage(string.Format(CultureInfo.InvariantCulture, "Snapshot of [{0}] was taken successfully.", this.VMName.Get(this.ActivityContext)));
                jobSuccesful = true;
            }
            else
            {
                this.LogBuildWarning(string.Format(CultureInfo.InvariantCulture, "Failed to create snapshot for VM [{0}]. with error {1}", this.VMName.Get(this.ActivityContext), outParams["ReturnValue"]));
            }

            inParams.Dispose();
            outParams.Dispose();
            vm.Dispose();
            virtualSystemService.Dispose();

            return(jobSuccesful);
        }
Пример #26
0
        private void serviceInstaller_Committing(object sender, InstallEventArgs e)
        {
            ManagementBaseObject InParam  = null;
            ManagementBaseObject OutParam = null;

            try
            {
                // Windows Interact W/Desktop...
                ConnectionOptions coOptions = new ConnectionOptions();
                coOptions.Impersonation = ImpersonationLevel.Impersonate;
                ManagementScope mgmtScope = new System.Management.ManagementScope(@"root\CIMV2", coOptions);
                mgmtScope.Connect();
                using (ManagementObject wmiService = new ManagementObject(string.Format(Properties.Resources.Win32ServiceName, serviceInstaller.ServiceName)))
                {
                    InParam = wmiService.GetMethodParameters(Properties.Resources.ParamInfo);
                    InParam[Properties.Resources.DesktopInteract] = true;
                    OutParam = wmiService.InvokeMethod(Properties.Resources.ParamInfo, InParam, null);
                }

                // set actions on recovery in order to restart the service 3 times
                var fa = new List <FailureAction>();
                fa.Add(new FailureAction(RecoverAction.Restart, 2000));
                fa.Add(new FailureAction(RecoverAction.Restart, 2000));
                fa.Add(new FailureAction(RecoverAction.Restart, 2000));
                SetRestartOnFailureRecovery(fa, "", "");
            }
            catch (Exception Error)
            {
                EventLog.WriteEntry(serviceInstaller.ServiceName, Error.ToString(), EventLogEntryType.Error);
            }
            finally
            {
                if (InParam != null)
                {
                    InParam.Dispose();
                }
                if (OutParam != null)
                {
                    OutParam.Dispose();
                }
            }
        }
Пример #27
0
        public static string GetDiskSerialNumber()
        {
            ManagementObjectSearcher managementObjectSearcher = new ManagementObjectSearcher();

            managementObjectSearcher.Query = new SelectQuery("Win32_DiskDrive", "", new string[]
            {
                "PNPDeviceID",
                "Signature"
            });
            ManagementObjectCollection managementObjectCollection = managementObjectSearcher.Get();

            ManagementObjectCollection.ManagementObjectEnumerator enumerator = managementObjectCollection.GetEnumerator();
            enumerator.MoveNext();
            ManagementBaseObject current = enumerator.Current;
            string result = current.Properties["signature"].Value.ToString().Trim();

            current.Dispose();
            managementObjectSearcher.Dispose();
            return(result);
        }
Пример #28
0
        public static VMJob CreateVirtualSystemSnapshot(VM vm)
        {
            ManagementScope scope = new ManagementScope(@"\\" + vm.Host.Name + @"\root\virtualization", vm.Host.HostConnectionOptions);

            ManagementObject virtualSystemService = Utility.GetServiceObject(scope, "Msvm_VirtualSystemManagementService");

            ManagementObject vmObj = Utility.GetTargetComputer(vm.GUID, scope);

            ManagementBaseObject inParams = virtualSystemService.GetMethodParameters("CreateVirtualSystemSnapshot");

            inParams["SourceSystem"] = vmObj.Path.Path;

            ManagementBaseObject outParams = virtualSystemService.InvokeMethod("CreateVirtualSystemSnapshot", inParams, null);
            //UInt32 returnValue = (UInt32)outParams["ReturnValue"];
            VMJob ThisJob = new VMJob(new ManagementObject(scope, new ManagementPath((string)outParams["Job"]), null));

            inParams.Dispose();
            outParams.Dispose();
            vmObj.Dispose();
            virtualSystemService.Dispose();
            return(ThisJob);
        }
Пример #29
0
        public async Task <bool> RebootComputerAsync(string ComputerName, string AdminUser, string AdminPassword, string UserDomain, string UserDNSDomain)

        {
            var ManagementPath = new ManagementPath(String.Format(@"\\{0}.{1}\root\cimv2", ComputerName, UserDNSDomain));
            var Options        = new ConnectionOptions()
            {
                EnablePrivileges = true,
                Username         = AdminUser,
                Password         = AdminPassword,
                Authority        = "ntlmdomain:" + UserDomain,
                Timeout          = new TimeSpan(0, 0, 5),
                Authentication   = AuthenticationLevel.Default
            };

            try
            {
                var Scope = new ManagementScope(ManagementPath, Options);
                Scope.Connect();
                var Query = new SelectQuery("Win32_OperatingSystem");
                using (var Searcher = new ManagementObjectSearcher(Scope, Query))
                    foreach (ManagementObject OS in Searcher.Get())
                    {
                        using (ManagementBaseObject InParams = OS.GetMethodParameters("Win32Shutdown"))
                        {
                            InParams["Flags"] = 6;
                            ManagementBaseObject OutParams = await Task.Run(() => OS.InvokeMethod("Win32Shutdown", InParams, null));

                            OutParams.Dispose();
                        }
                    }
            }
            catch (Exception e)
            {
                Logger.Log(new Elmah.Error(e));
                return(false);
            }

            return(true);
        }
Пример #30
0
/*
 *  /// <summary>
 *  /// Code to execute after the install has completed.
 *  /// </summary>
 *  private void IRServerInstaller_AfterInstall(object sender, InstallEventArgs e)
 *  {
 *    // TODO: Set the restart options here.
 *
 *    // Start the service ...
 *    //using (ServiceController serviceController = new ServiceController(Program.ServiceName))
 *    //serviceController.Start();
 *  }
 */

        /// <summary>
        /// Used to set the "Allow service to interact with the desktop" setting.
        /// </summary>
        private void IRServerInstaller_Committing(object sender, InstallEventArgs e)
        {
            ManagementBaseObject inParam  = null;
            ManagementBaseObject outParam = null;

            try
            {
                ConnectionOptions coOptions = new ConnectionOptions();
                coOptions.Impersonation = ImpersonationLevel.Impersonate;

                ManagementScope mgmtScope = new ManagementScope(@"root\CIMV2", coOptions);
                mgmtScope.Connect();

                string path = string.Format("Win32_Service.Name='{0}'", Shared.ServerName);

                using (ManagementObject wmiService = new ManagementObject(path))
                {
                    inParam = wmiService.GetMethodParameters("Change");
                    inParam["DesktopInteract"] = true;
                    inParam["PathName"]        = "\"" + Assembly.GetExecutingAssembly().Location + "\" -SERVICE";
                    outParam = wmiService.InvokeMethod("Change", inParam, null);
                }
            }
            finally
            {
                if (inParam != null)
                {
                    inParam.Dispose();
                }

                if (outParam != null)
                {
                    outParam.Dispose();
                }
            }
        }