/// <summary> /// call to SDK for driver update function /// </summary> /// <param name="arrUserDrivers"></param> /// <param name="arrUserUpdates"></param> public int UpdateDrivers(DriverData[] arrUserDrivers, DriverData[] arrUserUpdates) { //bDriverUpdateIsGoingOn = true; int retval = 0; IntPtr pUnmanagedUserDrivers = IntPtr.Zero; IntPtr pUnmanagedUserUpdates = IntPtr.Zero; try { // marshal input pUnmanagedUserDrivers = MarshalHelper.MarshalArray(ref arrUserDrivers); pUnmanagedUserUpdates = MarshalHelper.MarshalArray(ref arrUserUpdates); // call driver update function retval = DUSDKHandler.updateDeviceDriversEx( progressCallback, szProductKey, szAppDataLoc, szTempLoc, szRegistryLoc, downloadProgressCallback, pUnmanagedUserDrivers, pUnmanagedUserUpdates, arrUserDrivers.Length, szRestorePointName ); if (retval == DUSDKHandler.DefineConstants.SUCCESS) { //this.UIThread(() => this.label3.Text = "Drivers Updated Successfully!!"); } else if (retval == DUSDKHandler.DefineConstants.CANCEL_INSTALL) { //this.UIThread(() => this.label3.Text = "Update Stopped Successfully!!"); } else if (retval == DUSDKHandler.DefineConstants.FAIL) { ScanStatusTitle = WPFLocalizeExtensionHelpers.GetUIString("UpdateFailed"); ScanStatusText = string.Empty; } else { ; // check for error code } } catch (System.Exception ex) { MessageBox.Show(ex.ToString()); } finally { // free memory if (pUnmanagedUserDrivers != IntPtr.Zero) { Marshal.FreeHGlobal(pUnmanagedUserDrivers); } if (pUnmanagedUserUpdates != IntPtr.Zero) { Marshal.FreeHGlobal(pUnmanagedUserUpdates); } pUnmanagedUserDrivers = IntPtr.Zero; pUnmanagedUserUpdates = IntPtr.Zero; bDriverUpdateIsGoingOn = false; } return retval; }
void DriverUpdate(object sender, DoWorkEventArgs e) { bDriverUpdateIsGoingOn = true; devicesForUpdate = DevicesForScanning.Where(d => d.NeedsUpdate && d.SelectedForUpdate).ToList(); DriverData[] scanData = new DriverData[devicesForUpdate.Count]; DriverData[] updateData = new DriverData[devicesForUpdate.Count]; int i = 0; int id; foreach (DeviceInfo di in devicesForUpdate) { if (Int32.TryParse(di.Id, out id)) { scanData[i] = driverData[id]; updateData[i] = UserUpdates[id]; i++; } } UpdateDrivers(scanData, updateData); scanData = null; updateData = null; }