Exemplo n.º 1
0
        /// <summary>
        ///     Connects this instance of the <see cref="TaskService" /> class to a running Task Scheduler.
        /// </summary>
        private void Connect() {
            ResetUnsetProperties();

            if (!initializing && !DesignMode) {
                if (((!string.IsNullOrEmpty(userDomain) && !string.IsNullOrEmpty(userName) && !string.IsNullOrEmpty(userPassword)) ||
                    (string.IsNullOrEmpty(userDomain) && string.IsNullOrEmpty(userName) && string.IsNullOrEmpty(userPassword)))) {
                    // Clear stuff if already connected
                    if (v2TaskService != null || v1TaskScheduler != null) {
                        Dispose(true);
                    }

                    if (hasV2 && !forceV1) {
                        v2TaskService = new TaskSchedulerClass();
                        if (!string.IsNullOrEmpty(targetServer)) {
                            // Check to ensure character only server name. (Suggested by bigsan)
                            if (targetServer.StartsWith(@"\")) {
                                targetServer = targetServer.TrimStart('\\');
                            }
                            // Make sure null is provided for local machine to compensate for a native library oddity (Found by ctrollen)
                            if (targetServer.Equals(Environment.MachineName, StringComparison.CurrentCultureIgnoreCase)) {
                                targetServer = null;
                            }
                        }
                        v2TaskService.Connect(targetServer, userName, userDomain, userPassword);
                        targetServer = v2TaskService.TargetServer;
                        userName = v2TaskService.ConnectedUser;
                        userDomain = v2TaskService.ConnectedDomain;
                        maxVer = GetV2Version();
                    } else {
                        v1Impersonation = new WindowsImpersonatedIdentity(userName, userDomain, userPassword);
                        var csched = new CTaskScheduler();
                        v1TaskScheduler = (ITaskScheduler)csched;
                        if (!string.IsNullOrEmpty(targetServer)) {
                            // Check to ensure UNC format for server name. (Suggested by bigsan)
                            if (!targetServer.StartsWith(@"\\")) {
                                targetServer = @"\\" + targetServer;
                            }
                        } else {
                            targetServer = null;
                        }
                        v1TaskScheduler.SetTargetComputer(targetServer);
                        targetServer = v1TaskScheduler.GetTargetComputer();
                        maxVer = v1Ver;
                    }
                } else {
                    throw new ArgumentException("A username, password, and domain must be provided.");
                }
            }
        }
Exemplo n.º 2
0
 /// <summary>
 ///     Releases the unmanaged resources used by the <see cref="T:System.ComponentModel.Component" /> and optionally releases the managed resources.
 /// </summary>
 /// <param name="disposing"> true to release both managed and unmanaged resources; false to release only unmanaged resources. </param>
 protected override void Dispose(bool disposing) {
     if (v2TaskService != null) {
         Marshal.ReleaseComObject(v2TaskService);
         v2TaskService = null;
     }
     if (v1TaskScheduler != null) {
         Marshal.ReleaseComObject(v1TaskScheduler);
         v1TaskScheduler = null;
     }
     if (v1Impersonation != null) {
         v1Impersonation.Dispose();
         v1Impersonation = null;
     }
     base.Dispose(disposing);
 }