/// <summary> /// the fileItem.DestinationFullName is like this \\computername\c$\aaa\xx.dll /// </summary> /// <param name="fileItem"></param> public static void TakeOwnership(FileItem fileItem) { string msg = string.Format("taking ownership of file begins: destination: {0} ", fileItem.DestinationFullName); Singleton<ReportMediator>.UniqueInstance.ReportStatus(msg); string localFormatPath = @"C:" + fileItem.DestinationFullName.Substring(fileItem.DestinationFullName.IndexOf("c$", StringComparison.OrdinalIgnoreCase) + 2); string objPath = string.Format("CIM_DataFile.Name='{0}'", localFormatPath); ConnectionOptions connectionOptions = new ConnectionOptions(); connectionOptions.Authentication = AuthenticationLevel.Packet; connectionOptions.EnablePrivileges = true; connectionOptions.Username = Singleton<Constants>.UniqueInstance.UserName; connectionOptions.Password = Singleton<Constants>.UniqueInstance.PassWord; connectionOptions.Impersonation = ImpersonationLevel.Impersonate; try { ManagementScope scope = new ManagementScope(string.Format(@"\\{0}\root\cimv2", Singleton<Constants>.UniqueInstance.MachineName), connectionOptions); scope.Connect(); using (ManagementObject serviceObj = new ManagementObject(scope, new ManagementPath(objPath), null)) { ManagementBaseObject outParams = serviceObj.InvokeMethod("TakeOwnerShip", null, null); uint returnValue = (uint)outParams["ReturnValue"]; msg = string.Format("take ownership for file: {0} result: {1}", localFormatPath, returnValue); Singleton<ReportMediator>.UniqueInstance.ReportStatus(msg); ManagementBaseObject inParams = serviceObj.GetMethodParameters("ChangeSecurityPermissions"); inParams["Option"] = 4; inParams["SecurityDescriptor"] = EveryOneSecDescriptor; ManagementBaseObject outParamsOfChangingPermission = serviceObj.InvokeMethod("ChangeSecurityPermissions", inParams, null); uint returnValueOfChangingPermission = (uint)outParamsOfChangingPermission["ReturnValue"]; msg = string.Format("changing permission for file: {0} result: {1}", localFormatPath, returnValueOfChangingPermission); Singleton<ReportMediator>.UniqueInstance.ReportStatus(msg); } } catch (Exception ex) { msg = string.Format("could not take ownership of file {0} , {1}", localFormatPath, ex); Singleton<ReportMediator>.UniqueInstance.ReportStatus(msg, LogLevel.Warning); } msg = string.Format("taking ownership of file ends: destination: {0}", localFormatPath); Singleton<ReportMediator>.UniqueInstance.ReportStatus(msg); }
public static void ReplaceFile(FileItem fileItem) { string msg = string.Format("replacing file begins: source: {0} destination: {1}", fileItem.SourceFullName, fileItem.DestinationFullName); Singleton<ReportMediator>.UniqueInstance.ReportStatus(msg); try { if (!File.Exists(fileItem.DestinationFullName + ".bak")) { File.Copy(fileItem.DestinationFullName, fileItem.DestinationFullName + ".bak"); } File.Copy(fileItem.SourceFullName, fileItem.DestinationFullName, true); } catch (Exception e) { msg = string.Format("exception encounterred when replacing file: {0}, exception:{1}", fileItem.DestinationFullName, e); Singleton<ReportMediator>.UniqueInstance.ReportStatus(msg); } msg = string.Format("replacing file ends: source: {0} destination: {1}", fileItem.SourceFullName, fileItem.DestinationFullName); Singleton<ReportMediator>.UniqueInstance.ReportStatus(msg); }