Operation api false как включить windows 10

Обновлено: 07.07.2024

В этой статье описывается, как настроить в проектах классических приложений использование API-интерфейсов среды выполнения Windows (WinRT), предоставляемых в ОС Windows, и добавить в классические приложения современные возможности Windows 11 и Windows 10.

Некоторые API среды выполнения Windows (WinRT) не поддерживаются в классических приложениях. Дополнительные сведения см. в статье API среды выполнения Windows не поддерживаются в классических приложениях.

В Visual Studio щелкните правой кнопкой мыши проект в Обозревателе решений и выберите Изменить файл проекта. Файл проекта будет выглядеть примерно так.

В приведенном ниже примере показан параметр OutputType средства WinExe, который указывает на исполняемый файл графического пользовательского интерфейса Windows (и не позволяет открыть окно консоли при запуске приложения). Если в вашем приложении нет графического пользовательского интерфейса, значение OutputType будет другим. API-интерфейсы WinRT можно вызывать из приложений с графическим пользовательским интерфейсом, консольных приложений и библиотек для Windows. Кроме того, значение TargetFramework может не совпадать с примером ниже.

Замените значение элемента TargetFramework одной из указанных ниже строк, оставив все остальные значения без изменений.

  • net5.0-windows10.0.17763.0 — если приложение предназначено для Windows 10, версия 1809.
  • net5.0-windows10.0.18362.0 — если приложение предназначено для Windows 10, версия 1903.
  • net5.0-windows10.0.19041.0 — если приложение предназначено для Windows 10, версия 2004.
  • net5.0-windows10.0.22000.0 — если приложение предназначено для Windows 11.

Например, следующий элемент используется для проекта, предназначенного для Windows 10 версии 2004.

Сохраните изменения и закройте файл проекта.

Поддержка нескольких версий ОС Windows

Свойство TargetFramework для конкретной версии ОС Windows определяет версию пакета Windows SDK, с которым компилируется приложение. Это свойство определяет набор доступных API-интерфейсов во время сборки и предоставляет значения по умолчанию для TargetPlatformVersion и TargetPlatformMinVersion (если они не заданы явно). Свойство TargetPlatformVersion не нужно явно определять в файле проекта, так как оно автоматически задается версией ОС TargetFramework.

Значение TargetPlatformMinVersion можно переопределить, чтобы оно было меньше значения TargetPlatformVersion (определяется версией в свойстве TargetFramework). Благодаря этому приложение сможет работать в более ранних версиях ОС. Например, в файле проекта можно задать приведенные ниже значения, чтобы обеспечить для приложения поддержку Windows 10 версии 1809.

Обратите внимание, что при установке в качестве значения TargetPlatformMinVersion версии ниже, чем значение TargetPlatformVersion, есть вероятность того, что будут вызваны недоступные API-интерфейсы. При вызове API-интерфейсов WinRT, которые доступны не во всех поддерживаемых версиях ОС, рекомендуется защищать эти вызовы с помощью проверок ApiInformation. Дополнительные сведения см. в статье Приложения с адаптивным к версии кодом.

Убедитесь, что ссылки на пакеты активны:

  1. В Visual Studio выберите элементы Сервис -> Диспетчер пакетов NuGet -> Параметры диспетчера пакетов.
  2. Убедитесь, что для формата управления пакетами по умолчанию установлено значение PackageReference.

В Visual Studio щелкните правой кнопкой мыши проект в обозревателе решений и выберите элемент Управление пакетами NuGet.

В окне диспетчера пакетов NuGet выберите вкладку Обзор и найдите Microsoft.Windows.SDK.Contracts .

Когда пакет Microsoft.Windows.SDK.Contracts будет найден, выберите на правой панели диспетчера пакетов NuGet нужную версию пакета в зависимости от версии Windows 10, на которую нужно ориентировать приложение:

  • 10.0.19041.xxxx — вариант для Windows 10 версии 2004;
  • 10.0.18362.xxxx — вариант для Windows 10 версии 1903;
  • 10.0.17763.xxxx — вариант для Windows 10 версии 1809;
  • 10.0.17134.xxxx — вариант для Windows 10 версии 1803.

В приведенном ниже примере показан параметр OutputType средства WinExe, который указывает на исполняемый файл графического пользовательского интерфейса Windows (и не позволяет открыть окно консоли при запуске приложения). Если в вашем приложении нет графического пользовательского интерфейса, значение OutputType будет другим. API-интерфейсы WinRT можно вызывать из приложений с графическим пользовательским интерфейсом, консольных приложений и библиотек для Windows. Кроме того, значение TargetFramework может не совпадать с примером ниже.

По завершении файл проекта должен выглядеть примерно так.

Сохраните изменения и закройте файл проекта.

Настройка проекта классических приложений C++ (Win32) для использования API среды выполнения Windows

Воспользоваться API-интерфейсами WinRT позволяет библиотека C++/WinRT. C++/WinRT — это полностью стандартная современная проекция языка C++17 для API-интерфейсов WinRT, реализованная как библиотека на основе файлов заголовков и предназначенная для предоставления первоклассного доступа к современным API Windows.

Чтобы настроить C++/WinRT для проекта, сделайте следующее:

  • Для новых проектов можно установить расширение C++/WinRT Visual Studio (VSIX) и использовать один из шаблонов проектов C++/WinRT, входящих в это расширение.
  • Для существующих проектов можно установить в проект пакет NuGet Microsoft.Windows.CppWinRT.

Дополнительные сведения об этих вариантах см. в разделе Поддержка Visual Studio для C++/WinRT и VSIX .

Добавление возможностей Windows 10

Теперь все готово для добавления современных видов взаимодействия, которые активируются, когда пользователь запускает ваше приложение в Windows 10. Используйте этот процесс разработки.

✅ Сначала определите, какие возможности нужно добавить

Выбор огромен. Например, можно упростить оформление покупки с помощью API монетизации либо привлечь внимание к приложению, когда вы можете предложить что-либо интересное, например новую фотографию, добавленную другим пользователем.

Всплывающее уведомление

Дополнительные сведения см. в документации по UWP.

✅ Выберите путь улучшения: дополнить или расширить

Вам часто будут встречаться термины дополнить и расширить, поэтому сейчас мы поясним, какой именно смысл вкладываем в них.

Термин дополнить относится к API-интерфейсам WinRT, которые вы можете вызывать напрямую из классического приложения (независимо от того, применяете ли вы для приложения упаковку в пакет MSIX). При выборе новой возможности Windows 10 определите API-интерфейсы, которые вам необходимы для ее реализации, а затем проверьте, входит ли нужный API в этот список. Это список API-интерфейсов, которые можно вызывать непосредственно из классического приложения. Если выбранный API не входит в этот список, значит, связанные с этим API функции могут работать только в рамках процесса UWP. Сюда часто входят API-интерфейсы, которые отображают элементы XAML UWP, например элемент управления картой UWP или запрос безопасности Windows Hello.

API, которые отображают XAML UWP, обычно нельзя напрямую вызывать из классического приложений. Но иногда для них доступны альтернативные подходы. Если вы хотите разместить элементы управления XAML UWP или другие пользовательские визуальные объекты, попробуйте применить XAML Islands (доступны в Windows 10 с версии 1903) и (или) визуальный уровень (доступен в Windows 10 с версии 1803). Эти возможности можно использовать в упакованных и неупакованных классических приложениях.

Если вы решили упаковать классическое приложение в пакет MSIX, у вас есть возможность расширить это приложение, добавив к нему проект UWP. Проект классического приложения по-прежнему остается точкой входа для вашего приложения. Но проект UWP предоставляет доступ ко всем API-интерфейсам, которые не входят в этот список. Классические приложения могут взаимодействовать с процессами UWP с помощью службы приложений. У нас есть множество рекомендаций по настройке этой функции. Если вы хотите добавить возможность, для которой требуется проект UWP, см. раздел Расширение возможностей с помощью компонентов UWP.

✅ Добавьте ссылки на контракты API

Если вы можете вызывать API непосредственно из классического приложения, откройте браузер и найдите справочный раздел для этого API-интерфейса. Под общей информацией об API там представлена таблица с описанием контракта для этого API. Пример такой таблицы приведен ниже.

Таблица контракта API

✅ Вызовите API-интерфейсы для добавления возможности

Ниже приведен код для отображения окна уведомлений, которое мы уже видели ранее. Эти API-интерфейсы внесены в этот список, а значит, вы можете добавить этот код в классическое приложение и запустить его прямо сейчас.

Поддержка установочных баз Windows XP, Windows Vista, Windows 7 и Windows 8

Вы можете модернизировать приложение для Windows 10, не создавая новую ветвь и не поддерживая раздельные базы кода.

Если вы хотите создать отдельные двоичные файлы для пользователей Windows 10, используйте условную компиляцию. Если вы предпочитаете создать один набор двоичных файлов, которые развертываются для всех пользователей Windows, используйте проверки во время выполнения.

Давайте вкратце рассмотрим эти варианты.

Условная компиляция

Можно вести одну базу кода и компилировать набор двоичных файлов только для пользователей Windows 10.

Для этого добавьте новую конфигурацию сборки в проект.

Конфигурация сборки

Создайте константу для этой конфигурации сборки, чтобы определить код, который будет вызывать API-интерфейсы WinRT.

Константа условной компиляции

Для проектов на основе C++ эта константа называется описанием препроцессора.

Константа описания препроцессора

Добавьте эту константу до всех блоков кода UWP.

Компилятор выполнит сборку этого кода, только если соответствующая константа определена в активной конфигурации сборки.

Проверки во время выполнения

Можно скомпилировать один набор двоичных файлов для всех пользователей Windows независимо от того, какую версию Windows они используют. В этом случае приложение будет обращаться к API-интерфейсам WinRT, только если пользователь выполняет его как упакованное приложение в среде Windows 10.

Для добавления в код проверок во время выполнения проще всего установить пакет NuGet Desktop Bridge Helpers (Вспомогательные элементы моста для классических приложений), а затем использовать метод IsRunningAsUWP() для отсеивания всего кода, который вызывает API-интерфейсы WinRT. Дополнительные сведения см. в записи блога Мост для классических приложений — определение контекста приложения.

Связанные примеры

Есть вопросы? Задайте их на Stack Overflow. Наша команда следит за этими тегами. Вы также можете задавать вопросы на наших форумах.

date

03.06.2020

directory

PowerShell, Windows 10, Windows Server 2016

comments

Комментариев пока нет

По-умолчанию настройки Windows запрещают запуск скриптов PowerShell. Это необходимо для предотвращения запуска вредоносного кода на PowerShell. Настройки политик запуска PowerShell скриптов определяются в Execution Policy. В этой статье мы рассмотрим доступные политики запуска PS скриптов, как изменить Execution Policy и настроить политики использования PowerShell скриптов на компьютерах в домене.

Выполнение PowerShell скриптов запрещено для данной системы

При попытке выполнить PowerShell скрипт (файл с расширением PS1) на чистой Windows 10, появляется ошибка:

Не удается загрузить файл ps1, так как выполнение скриптов запрещено для данной системы.

Текущее значение политики выполнения скриптов PowerShell на компьютере можно получить командой:

Get-ExecutionPolicy

Доступны следующие значения PowerShell Execution Policy:

При запуске сторонних PowerShell скриптов может появляется предупреждение с подтверждением запуска, см. ниже.

Как разрешить запуск скриптов PowerShell с помощью Execution Policy?

Чтобы изменить текущее значение политики запуска PowerShell скриптов, используется командлет Set-ExecutionPolicy.

Например, разрешим запуск локальных скриптов:

Подтвердите изменение политики запуска PS1 скриптов, нажав Y или A.

Set-ExecutionPolicy RemoteSigned разрешить запуск локальных powershell скриптов

Чтобы запрос не появлялся, можно использовать параметр Force.

Set-ExecutionPolicy RemoteSigned –Force

Если вы установили значение политики PowerShell Execution Policy в Unrestricted, то при запуске удаленных скриптов из сетевых каталогов по UNC пути, скачанных из интернета файлов, все равно будет появляться предупреждение:

Run only scripts that you trust. While scripts from the internet can be useful, this script can potentially harm your computer. If you trust this script, use the Unblock-File cmdlet to allow the script to run without this warning message

Как PowerShell различает локальные и удаленные скрипты? Все дело в идентификаторе зоны ZoneId, которую выставляет браузер в альтернативном потоке при загрузке файла (см. статью “Как Windows определяет, что файл скачан из Интернета?”). Вы можете разблокировать такой файл, поставив галку “Разблокирвать” в его свойствах или очиститься метку зоны с помощью комадлета Unblock-File.

Также следует различать различные области действия политик выполнения скриптов PowerShell (scopes):

Область применения политики можно указать с помощью параметр Scope командлета Set-ExecutionPolicy. Например:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass –Force

Проверим текущие настройки ExecutionPolicy для всех областей:

Get-ExecutionPolicy scopes области действия

Значение политики выполнения, которые вы задаете с помощью командлета Set-ExecutionPolicy для областей CurrentUser и LocalMachine, хранятся в реестре. Например, выполните командлет:

Set-ExecutionPolicy -Scope LocalMachine -ExecutionPolicy Restricted –Force

Откройте ветку реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell и проверьте значение REG_SZ параметра ExecutionPolicy. Оно изменилось на Restricted (допустимые значения параметра Restricted, AllSigned, RemoteSigned, Bypass, Unrestricted и Undefined).

ExecutionPolicy в реестре

Аналогичные настройки для области CurrentUser находятся в разделе реестра пользователя HKEY_CURRENT_USER\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell.

Т.е. вы можете распространить нужные настройки политики исполнения скриптов через реестр с помощью Group Policy Preferences.

Отметим, что чаще всего в корпоративной среде используется ExecutionPolicy со значением AllSigned на уровне LocalMachine. Это обеспечивает максимальный баланс между безопасностью и удобством. Для личного пользования на компьютере можно использовать RemoteSigned. Ну а Bypass политику лучше использовать только для запуска отдельных задач (например для запуска скриптов через GPO или заданий планировщика).

Настройка PowerShell Execution Policy с помощью групповых политик

Вы можете настроить политику выполнения PowerShel скриптов на серверах или компьютерах домена с помощью групповых политик.

  1. С помощью редактора доменных GPO (gpmc.msc) создайте новую GPO (или отредактируйте) существующую и назначьте ее на OU с компьютерами, к которым нужно применить политику запуска PowerShell скриптов;
  2. В редакторе политики перейдите в раздел Computer Configuration -> Policies -> Administrative Templates -> Windows Components -> Windows PowerShell и найдите политику Turn on Script Execution (Включить выполнение сценариев);

групповая политика Turn on Script Execution

  • Allow only signed scripts (Разрешать только подписанные сценарии) — соответствует политике AllSigned;
  • Allow local scripts and remote signed scripts (Разрешать локальные и удаленные подписанные сценарии) — соответствует политике PS RemoteSigned;
  • Allow all scripts (Разрешать все сценарии) — политика Unrestricted.

После настройки политики выполнения через GPO вы не сможете изменить настройки политики выполнения скриптов вручную. При попытке изменить настройки Execution Policy на компьютере, на который применяется такая GPO, появится ошибка:

Set-ExecutionPolicy : Windows PowerShell updated your execution policy successfully, but the setting is overridden by a policy defined at a more specific scope

Аналогичным образом можно настроить Execution Policy на отдельном компьютере с помощью локального редактора GPO – gpedit.msc.

Способы обхода политики PowerShell Execution

Есть несколько трюков, которые могут помочь вам, когда нужно запустить на компьютере PowerShell скрипт, не изменяя настройки политики выполнения. Например, я хочу запустить простой PS1 скрипт, который поверяет, что запущен с правами администратора.

Компьютеры на базе Windows 10 поддерживают несколько способов запуска. Среднестатистические пользователи не придают этой опции значения, включая ПК в обычном режиме, когда доступны все основные службы. Но параллельно с этим существует режим отладки на операционной системе Windows 10, который может пригодиться опытным юзерам, желающим провести диагностику своего устройства.

Что такое режим отладки в Windows 10

Для определения того, что собой представляет данный режим, необходимо определить значение слова «отладка» («Debugging»). В сфере компьютерной техники ею называют процесс, позволяющий найти и устранить ошибки, связанные с работой ПК.

screenshot_1

Режим отладки позволяет решить массу проблем – от небольших сбоев Windows 10 до полного отказа от работы. Впрочем, к нему следует обращаться только опытным пользователям, которые способны найти объяснение каждому своему шагу. В остальных случаях, когда речь идет о новичке, исключать возможность применения режима тоже нельзя. Но в такой ситуации важно изучить инструкцию по активации Debugging и способах его применения на практике.

Как его включить?

Чтобы приступить к поиску и устранению неисправностей, необходимо перейти в режим Debugging. Для этого понадобится открыть меню с разными вариантами загрузки по следующему алгоритму:

screenshot_2

  • Перейдите в раздел «Обновление и безопасность», а затем – «Восстановление».

screenshot_3

  • Под заголовком «Особые варианты загрузки» нажмите на кнопку «Перезагрузить сейчас».

screenshot_4

На заметку. Также вы можете открыть дополнительное меню, зажав клавишу «Shift» при выборе варианта «Перезагрузка» в «Пуске».

В случае правильного выполнения указанных действий компьютер перезагрузится, а при следующем включении вы увидите синий экран с выбором действий. Можно нажать на кнопку «Продолжить», чтобы запустить ПК в стандартном режиме, но нас интересует Debugging, поэтому действуйте иначе:

  • Перейдите в раздел «Поиск и устранение неисправностей».

screenshot_5

  • Выберите «Дополнительные параметры», а затем – «Параметры загрузки».

screenshot_6

  • Найдите в списке пункт, отвечающий за отладку, и нажмите на клавишу, которая отвечает за ее активацию (как правило, это клавиша «F1»).

screenshot_7

После этого устройство включится вместе с отладочным окном, которое поможет выполнить различные манипуляции для диагностики и решения проблем. Также в рассматриваемом режиме любые ошибки сохраняются в виде отдельных файлов «логов», аналогичным образом помогающих установить причины неполадок и своевременно устранить их.

Возможные проблемы

  • Щелкните ПКМ по иконке «Пуск».
  • Откройте Командную строку с правами Администратора.
  • Введите запрос «bcdedit /set advancedoptions true».

screenshot_8

Следом произойдет перезапуск, и расширенные параметры откроются в принудительном порядке. Еще одна проблема связана с выходом из отладки. Чтобы компьютер включался в стандартной конфигурации, необходимо обработать запрос «deletevalue». Впечатать «bcdedit /deletevalue advancedoptions» в вышеупомянутой Командной строке или на появившемся синем экране выбрать опцию «Продолжить».


Windows 10 PowerShell – это средство командной строки, которое позволяет выполнять команды и сценарии для изменения параметров системы и автоматизации задач. Это похоже на командную строку, но PowerShell является более эффективным интерфейсом командной строки (CLI), который предоставляет широкий набор инструментов и обеспечивает большую гибкость и контроль (особенно для сценариев).

Скрипт – это просто набор команд, сохраненных в текстовый файл (с расширением .ps1), которые PowerShell может понять и выполнить в заданной последовательности. Единственное предупреждение заключается в том, что в отличие от командной строки, протокол безопасности по умолчанию предотвращает выполнение всех сценариев.

Работа со скриптами в инструменте PowerShell Windows 10

В этой версии урока по Windows 10 мы проведём вас шаг за шагом, чтобы вы смогли успешно запустить свой первый скрипт в PowerShell.

Создание файла сценария PowerShell

В Windows 10 файлы сценариев PowerShell можно создавать с помощью практически любого текстового редактора или консоли интегрированной среды сценариев (ISE).

Создание скрипта с помощью блокнота

Чтобы создать сценарий PowerShell с помощью блокнота, выполните следующие действия:

  1. Откройте приложение «Блокнот».
  2. Создайте или вставьте сценарий. Например: Write-Host "«Поздравляем! Ваш первый скрипт успешно выполнен»"

Создание файла скрипта PowerShell с помощью блокнота

Вышеприведенный скрипт просто выводит на экране фразу «Поздравляем! Ваш первый скрипт успешно выполнен».

Создание сценария с помощью интегрированной среды сценариев

Кроме того, консоль PowerShell ISE можно использовать для кодирования сценариев в Windows 10. Интегрированная cреда сценариев является сложным инструментом, но вы можете начать работу с помощью этих шагов:

    Откройте системный поиск и введите запрос Windows PowerShell ISE, щелкните правой кнопкой мыши верхний результат, и выберите Запуск от имени администратора или выберите соответствующий параметр в правой колонке.

Запуск интегрированной среды сценариев

В PowerShell ISE создайте пустой файл .ps1, в котором можно создать или вставить скрипт. Например:

Write-Host "«Поздравляем! Ваш первый скрипт успешно выполнен»"

Создаём скрипт для PowerShell через ISE

Как только Вы выполнили эти шаги с помощью Блокнота или PowerShell ISE, сценарий готов к запуску, но он не будет выполнен. Это происходит потому, что параметры PowerShell по умолчанию всегда настроены на блокирование выполнения любого сценария.

Запуск файла сценария PowerShell

Чтобы запустить файл сценария в PowerShell, необходимо изменить политику выполнения, выполнив следующие действия:

  1. Откройте поиск и введите PowerShell, щелкните правой кнопкой мыши в верхний результат и выберите Запуск от имени администратора.
  2. Введите следующую команду, чтобы разрешить выполнение скриптов и нажмите клавишу Enter :

Разрешим запуск скриптов PowerShell

Запуск файла скрипта PowerShell

После выполнения этих шагов сценарий будет запущен, и если он был создан правильно, вы должны увидеть его вывод без проблем.

PowerShell в Windows 10 включает четыре политики выполнения:

  • Restricted – останавливает выполнение скрипта.
  • RemoteSigned – запускает скрипты, созданные на устройстве. Однако, сценарии, созданные на другом компьютере, не будут запускаться, если они не содержат подписи доверенного издателя.
  • AllSigned – все скрипты будут работать до тех пор, пока они подписаны надежным издателем.
  • Unrestricted запускает любой скрипт без каких-либо ограничений.

В приведенных выше шагах мы использовали команду, чтобы разрешить запуск локальных скриптов в Windows 10. Однако, если вы не планируете регулярно выполнять скрипты, можно восстановить настройки по умолчанию, используя те же инструкции, но на Шаге 4, обязательно используйте Set-ExecutionPolicy Restricted команду.

Читайте также: