Как отключить com
Чтобы отключить приложение от аккаунта, выполните следующие действия:
- Перейдите в раздел Устройства .
- Нажмите на интересующее вас устройство,
- Откройте выпадающий список Установленные приложения .
- Нажмите на кнопку корзина () рядом с интересующим вас приложением. Подтвердите действие. Приложение будет отключено от вашего аккаунта.
Вы можете подключить отключенное приложение к своему аккаунту снова. Если на устройстве установлено только одно приложение, подключенное к вашему аккаунту, то при отключении приложения от аккаунта это устройство также будет отключено.
После отключения приложения от аккаунта вы не сможете удаленно управлять работой приложения на устройстве. Отключение приложений от аккаунта не влияет на работу этих приложений, если их функции не требуют обязательного подключения к My Kaspersky. Подписки на использование приложений на отключенных устройствах продолжат действовать согласно условиям Лицензионных соглашений. Информация о приобретенных подписках сохранится в вашем аккаунте.
Функции приложений, требующие для работы обязательного подключения к аккаунту My Kaspersky, будут недоступны после отключения устройства или приложения.
Как отключить com
Когда я подконектился к другой БД, выполнил действия и закрыл 1С-ку, то СOM соединение закроется или нет? Или так и останется открытым соединение, если да, то как отключить COM соединение?
СОМсодинение = неопределено
должно и так закрыться.
COM соединение закрываеться в след. случаях
1. Обнуление (разрушение) всех переменных в которых храняться данные соединения (иногда правда глючит)
2. Возникновении ошибки в модуле COM соединения при загрузки
3. программном закрытие программы (правда я так и не нашел корректного способа)
(3) в смысле остаётся.. а к чему подключался?
+4 это к (3) часть 3
(5) нет, просто попытки вызова програмного закрытия программы приводят к ошибкам выполнения 1с в COM соединении,
(6)+ и при этом происходит исключение, а соединение остаеться
Так как закрыть грамотно? Просто есть мысля что на сервере остается соединение или данные по нему это за 4-7 дней приводит к тому что 1С начинает глючить, и необходимо перезапускать сервак, т.к. после перезапуска все окей.
(8)+ и дело глюков 1С на серваке не разросшийся лог файл или лог транзакций и с темп все окей. Поэтому я думаю ,а не может ли быть дело в соединениях, у меня просто синхронизация через COM ночью идет. Вот и хочу узнать как грамотно закрыть
(8) утром ему дисконнект сделай) или ребут программный..(серверу 1С)
имхо проще будет чем иголку в стоге сена искать..
(7) не сталкивался пока ещё с таким.
Вообще 100% гарантию закрытия COM соединения дает перезагрузка клиента,
во всех других случаях бывают глюки.
Правда в OLE глюков на порядок больше
у меня около 30 зверей и они постоянно пользуют COM,
стабильно (примерно 1раз в неделю) соединение не разрываеться (хотя источник закрыт)
У меня вся деятельность на серваке происходит, ну чтобы не глючило, т.е. на серваке запускаеться БД и конектиться к другой, потом закрываеться, ну а дальше там обновления , выгрузки идут.
Можно конечно на автомате поставить, чтобы после всего еще и перезагрука сервакам была. Но не хотелось бы.
Отключение/Включение СОМ-порта
Ребят, подскажите, как можно отключить, а потом включить СОМ-порт программно? Бывает, что порты отваливаются, и нужно их перезапустить через диспетчер устройств. Хотелось бы реализовать это программно. Операционная система: Windows 10
Отслеживать
14k 13 13 золотых знаков 38 38 серебряных знаков 63 63 бронзовых знака
задан 16 мар 2017 в 10:05
473 2 2 серебряных знака 15 15 бронзовых знаков
Вот этот ответ поможет: Win32 API function to programmatically enable/disable device
16 мар 2017 в 11:22
@DenisBubnov, отличный ответ, не могли бы вы его перевести и разместить тут в качестве ответа(со ссылкой на оригинал)?
16 мар 2017 в 11:37
@vp_arth, могу, немного позже опубликую 🙂
16 мар 2017 в 11:38
ассоциация: stackoverflow.com/questions/1438371/…
16 мар 2017 в 12:53
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Вы можете включить/отключить устройства от Win32 (и, следовательно, из C# с помощью P/Invoke) с использованием SetupDi API, но не все устройства таким образом можно отключить.
Проблему Вы будете получать, например, при попытке отключения тачпада от Win32 (или WMI или любой другой API, который вызывает из в SetupDi* — семейства функций). Причина в том, что драйвер мыши по умолчанию, которые в большинстве ноутбуков с сенсорной панелью («PS/2-совместимая мышь»), не поддерживает отключение с помощью SetupDi API. Возможно это может быть потому, что старые мыши, использующие PS/2 — разъем не могут быть отсоединены на горячую без перезагрузки оборудования.
Для того, чтобы убедиться в том, что Вы можете отключить устройство, перейдите в Диспетчер устройств и щелкните правой кнопкой мыши на устройстве мыши в списке устройств. Если там есть опция Отключить и она активна, то Вы можете использовать SetupDi , чтобы отключить это устройство. Если нет опции отключения — увы, не повезло, этого сделать не получится.
Если Вы видите опцию Отключить , то приведенный код ниже должен позволить Вам отключить и повторно включить устройство.
Код для вызова вспомогательной библиотеки:
public static void EnableMouse(bool enable) < // every type of device has a hard-coded GUID, this is the one for mice Guid mouseGuid = new Guid(""); // get this from the properties dialog box of this device in Device Manager string instancePath = @"ACPI\PNP0F03\4&3688D3F&0"; DeviceHelper.SetDeviceEnabled(mouseGuid, instancePath, enable); >
Вот сама вспомогательная библиотека, взято отсюда:
using System; using System.Text; using System.Collections.Generic; using DisableDevice; using System.Runtime.InteropServices; using System.ComponentModel; using Microsoft.Win32.SafeHandles; using System.Security; using System.Runtime.ConstrainedExecution; using System.Management; namespace DisableDevice < [Flags()] internal enum SetupDiGetClassDevsFlags < Default = 1, Present = 2, AllClasses = 4, Profile = 8, DeviceInterface = (int)0x10 >internal enum DiFunction < SelectDevice = 1, InstallDevice = 2, AssignResources = 3, Properties = 4, Remove = 5, FirstTimeSetup = 6, FoundDevice = 7, SelectClassDrivers = 8, ValidateClassDrivers = 9, InstallClassDrivers = (int)0xa, CalcDiskSpace = (int)0xb, DestroyPrivateData = (int)0xc, ValidateDriver = (int)0xd, Detect = (int)0xf, InstallWizard = (int)0x10, DestroyWizardData = (int)0x11, PropertyChange = (int)0x12, EnableClass = (int)0x13, DetectVerify = (int)0x14, InstallDeviceFiles = (int)0x15, UnRemove = (int)0x16, SelectBestCompatDrv = (int)0x17, AllowInstall = (int)0x18, RegisterDevice = (int)0x19, NewDeviceWizardPreSelect = (int)0x1a, NewDeviceWizardSelect = (int)0x1b, NewDeviceWizardPreAnalyze = (int)0x1c, NewDeviceWizardPostAnalyze = (int)0x1d, NewDeviceWizardFinishInstall = (int)0x1e, Unused1 = (int)0x1f, InstallInterfaces = (int)0x20, DetectCancel = (int)0x21, RegisterCoInstallers = (int)0x22, AddPropertyPageAdvanced = (int)0x23, AddPropertyPageBasic = (int)0x24, Reserved1 = (int)0x25, Troubleshooter = (int)0x26, PowerMessageWake = (int)0x27, AddRemotePropertyPageAdvanced = (int)0x28, UpdateDriverUI = (int)0x29, Reserved2 = (int)0x30 >internal enum StateChangeAction < Enable = 1, Disable = 2, PropChange = 3, Start = 4, Stop = 5 >[Flags()] internal enum Scopes < Global = 1, ConfigSpecific = 2, ConfigGeneral = 4 >internal enum SetupApiError < NoAssociatedClass = unchecked((int)0xe0000200), ClassMismatch = unchecked((int)0xe0000201), DuplicateFound = unchecked((int)0xe0000202), NoDriverSelected = unchecked((int)0xe0000203), KeyDoesNotExist = unchecked((int)0xe0000204), InvalidDevinstName = unchecked((int)0xe0000205), InvalidClass = unchecked((int)0xe0000206), DevinstAlreadyExists = unchecked((int)0xe0000207), DevinfoNotRegistered = unchecked((int)0xe0000208), InvalidRegProperty = unchecked((int)0xe0000209), NoInf = unchecked((int)0xe000020a), NoSuchHDevinst = unchecked((int)0xe000020b), CantLoadClassIcon = unchecked((int)0xe000020c), InvalidClassInstaller = unchecked((int)0xe000020d), DiDoDefault = unchecked((int)0xe000020e), DiNoFileCopy = unchecked((int)0xe000020f), InvalidHwProfile = unchecked((int)0xe0000210), NoDeviceSelected = unchecked((int)0xe0000211), DevinfolistLocked = unchecked((int)0xe0000212), DevinfodataLocked = unchecked((int)0xe0000213), DiBadPath = unchecked((int)0xe0000214), NoClassInstallParams = unchecked((int)0xe0000215), FileQueueLocked = unchecked((int)0xe0000216), BadServiceInstallSect = unchecked((int)0xe0000217), NoClassDriverList = unchecked((int)0xe0000218), NoAssociatedService = unchecked((int)0xe0000219), NoDefaultDeviceInterface = unchecked((int)0xe000021a), DeviceInterfaceActive = unchecked((int)0xe000021b), DeviceInterfaceRemoved = unchecked((int)0xe000021c), BadInterfaceInstallSect = unchecked((int)0xe000021d), NoSuchInterfaceClass = unchecked((int)0xe000021e), InvalidReferenceString = unchecked((int)0xe000021f), InvalidMachineName = unchecked((int)0xe0000220), RemoteCommFailure = unchecked((int)0xe0000221), MachineUnavailable = unchecked((int)0xe0000222), NoConfigMgrServices = unchecked((int)0xe0000223), InvalidPropPageProvider = unchecked((int)0xe0000224), NoSuchDeviceInterface = unchecked((int)0xe0000225), DiPostProcessingRequired = unchecked((int)0xe0000226), InvalidCOInstaller = unchecked((int)0xe0000227), NoCompatDrivers = unchecked((int)0xe0000228), NoDeviceIcon = unchecked((int)0xe0000229), InvalidInfLogConfig = unchecked((int)0xe000022a), DiDontInstall = unchecked((int)0xe000022b), InvalidFilterDriver = unchecked((int)0xe000022c), NonWindowsNTDriver = unchecked((int)0xe000022d), NonWindowsDriver = unchecked((int)0xe000022e), NoCatalogForOemInf = unchecked((int)0xe000022f), DevInstallQueueNonNative = unchecked((int)0xe0000230), NotDisableable = unchecked((int)0xe0000231), CantRemoveDevinst = unchecked((int)0xe0000232), InvalidTarget = unchecked((int)0xe0000233), DriverNonNative = unchecked((int)0xe0000234), InWow64 = unchecked((int)0xe0000235), SetSystemRestorePoint = unchecked((int)0xe0000236), IncorrectlyCopiedInf = unchecked((int)0xe0000237), SceDisabled = unchecked((int)0xe0000238), UnknownException = unchecked((int)0xe0000239), PnpRegistryError = unchecked((int)0xe000023a), RemoteRequestUnsupported = unchecked((int)0xe000023b), NotAnInstalledOemInf = unchecked((int)0xe000023c), InfInUseByDevices = unchecked((int)0xe000023d), DiFunctionObsolete = unchecked((int)0xe000023e), NoAuthenticodeCatalog = unchecked((int)0xe000023f), AuthenticodeDisallowed = unchecked((int)0xe0000240), AuthenticodeTrustedPublisher = unchecked((int)0xe0000241), AuthenticodeTrustNotEstablished = unchecked((int)0xe0000242), AuthenticodePublisherNotTrusted = unchecked((int)0xe0000243), SignatureOSAttributeMismatch = unchecked((int)0xe0000244), OnlyValidateViaAuthenticode = unchecked((int)0xe0000245) >[StructLayout(LayoutKind.Sequential)] internal struct DeviceInfoData < public int Size; public Guid ClassGuid; public int DevInst; public IntPtr Reserved; >[StructLayout(LayoutKind.Sequential)] internal struct PropertyChangeParameters < public int Size; // part of header. It's flattened out into 1 structure. public DiFunction DiFunction; public StateChangeAction StateChange; public Scopes Scope; public int HwProfile; >internal class NativeMethods < private const string setupapi = "setupapi.dll"; private NativeMethods() < >[DllImport(setupapi, CallingConvention = CallingConvention.Winapi, SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool SetupDiCallClassInstaller(DiFunction installFunction, SafeDeviceInfoSetHandle deviceInfoSet, [In()] ref DeviceInfoData deviceInfoData); [DllImport(setupapi, CallingConvention = CallingConvention.Winapi, SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool SetupDiEnumDeviceInfo(SafeDeviceInfoSetHandle deviceInfoSet, int memberIndex, ref DeviceInfoData deviceInfoData); [DllImport(setupapi, CallingConvention = CallingConvention.Winapi, CharSet = CharSet.Unicode, SetLastError = true)] public static extern SafeDeviceInfoSetHandle SetupDiGetClassDevs([In()] ref Guid classGuid, [MarshalAs(UnmanagedType.LPWStr)] string enumerator, IntPtr hwndParent, SetupDiGetClassDevsFlags flags); /* [DllImport(setupapi, CallingConvention = CallingConvention.Winapi, CharSet = CharSet.Unicode, SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool SetupDiGetDeviceInstanceId(SafeDeviceInfoSetHandle deviceInfoSet, [In()] ref DeviceInfoData did, [MarshalAs(UnmanagedType.LPTStr)] StringBuilder deviceInstanceId, int deviceInstanceIdSize, [Out()] ref int requiredSize); */ [DllImport("setupapi.dll", SetLastError = true, CharSet = CharSet.Auto)] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool SetupDiGetDeviceInstanceId( IntPtr DeviceInfoSet, ref DeviceInfoData did, [MarshalAs(UnmanagedType.LPTStr)] StringBuilder DeviceInstanceId, int DeviceInstanceIdSize, out int RequiredSize ); [SuppressUnmanagedCodeSecurity()] [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] [DllImport(setupapi, CallingConvention = CallingConvention.Winapi, SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool SetupDiDestroyDeviceInfoList(IntPtr deviceInfoSet); [DllImport(setupapi, CallingConvention = CallingConvention.Winapi, SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool SetupDiSetClassInstallParams(SafeDeviceInfoSetHandle deviceInfoSet, [In()] ref DeviceInfoData deviceInfoData, [In()] ref PropertyChangeParameters classInstallParams, int classInstallParamsSize); > internal class SafeDeviceInfoSetHandle : SafeHandleZeroOrMinusOneIsInvalid < public SafeDeviceInfoSetHandle() : base(true) < >protected override bool ReleaseHandle() < return NativeMethods.SetupDiDestroyDeviceInfoList(this.handle); >> public sealed class DeviceHelper < private DeviceHelper() < >/// /// Enable or disable a device. /// /// The class guid of the device. Available in the device manager. /// The device instance id of the device. Available in the device manager. /// True to enable, False to disable. /// Will throw an exception if the device is not Disableable. public static void SetDeviceEnabled(Guid classGuid, string instanceId, bool enable) < SafeDeviceInfoSetHandle diSetHandle = null; try < // Get the handle to a device information set for all devices matching classGuid that are present on the // system. diSetHandle = NativeMethods.SetupDiGetClassDevs(ref classGuid, null, IntPtr.Zero, SetupDiGetClassDevsFlags.Present); // Get the device information data for each matching device. DeviceInfoData[] diData = GetDeviceInfoData(diSetHandle); // Find the index of our instance. i.e. the touchpad mouse - I have 3 mice attached. int index = GetIndexOfInstance(diSetHandle, diData, instanceId); // Disable. EnableDevice(diSetHandle, diData[index], enable); >finally < if (diSetHandle != null) < if (diSetHandle.IsClosed == false) < diSetHandle.Close(); >diSetHandle.Dispose(); > > > private static DeviceInfoData[] GetDeviceInfoData(SafeDeviceInfoSetHandle handle) < Listdata = new List(); DeviceInfoData did = new DeviceInfoData(); int didSize = Marshal.SizeOf(did); did.Size = didSize; int index = 0; while (NativeMethods.SetupDiEnumDeviceInfo(handle, index, ref did)) < data.Add(did); index += 1; did = new DeviceInfoData(); did.Size = didSize; >return data.ToArray(); > // Find the index of the particular DeviceInfoData for the instanceId. private static int GetIndexOfInstance(SafeDeviceInfoSetHandle handle, DeviceInfoData[] diData, string instanceId) < const int ERROR_INSUFFICIENT_BUFFER = 122; for (int index = 0; index if (result == false) throw new Win32Exception(); if (instanceId.Equals(sb.ToString())) < return index; >> // not found return -1; > // enable/disable. private static void EnableDevice(SafeDeviceInfoSetHandle handle, DeviceInfoData diData, bool enable) < PropertyChangeParameters @params = new PropertyChangeParameters(); // The size is just the size of the header, but we've flattened the structure. // The header comprises the first two fields, both integer. @params.Size = 8; @params.DiFunction = DiFunction.PropertyChange; @params.Scope = Scopes.Global; if (enable) < @params.StateChange = StateChangeAction.Enable; >else < @params.StateChange = StateChangeAction.Disable; >bool result = NativeMethods.SetupDiSetClassInstallParams(handle, ref diData, ref @params, Marshal.SizeOf(@params)); if (result == false) throw new Win32Exception(); result = NativeMethods.SetupDiCallClassInstaller(DiFunction.PropertyChange, handle, ref diData); if (result == false) < int err = Marshal.GetLastWin32Error(); if (err == (int)SetupApiError.NotDisableable) throw new ArgumentException("Device can't be disabled (programmatically or in Device Manager)."); else if (err >= (int)SetupApiError.NoAssociatedClass && err > > >
Данный ответ взят с en SO, переведен и дополнен мной. Ссылка на источник: Win32 API function to programmatically enable/disable device
У каждого типа устройства есть жестко запрограммированный GUID, для мышки — он один, для COM-порта — другой, и так для всех устройств. Вам необходимо найти нужный GUID и instancePath и подставить в верхнем блоке кода. Данную информацию можно найти в разделе Диспетчер устройств в сведениях об устройстве.
Также, для корректной работы программы рекомендуется компилировать приложение в конфигурации AnyCPU , при этом среда разработки должна быть запущена с правами Администратора, иначе не будет прав доступа.
Как отключить подписку?
Автоматическое продление подписки не отключается после удаления приложения или аккаунта.
Сперва вам нужно отключить подписку, чтобы в дальнейшем за нее не было списаний.
Сделать это можно в любой момент, но не позднее, чем за сутки до окончания действия текущего оплаченного периода.
Информацию по возврату средств за ошибочное списание можно найти в статье: Можно ли вернуть деньги за подписку?
Узнать какая у вас подписка и до какой даты она действует можно в статье: Где найти информацию по подписке в профиле?
Если после прочтения статьи у вас остались вопросы – напишите в нашу поддержку. Написать нам можно из приложения (раздел “Справка и поддержка“), на почту support@zvuk.com, либо нажав на текущей странице на иконку облака с тремя точками (находится в нижнем правом углу).
