Задержка приостановки приложения с помощью расширенного сеанса выполнения

Немодальные аналоги модальных методов

Некоторые методы встроенного языка открывают модальные окна. Для этих методов в платформе были созданы «методы-дублёры», которые обладают той же функциональностью, но используют блокирующие окна. Например, старый метод Вопрос() и новый «метод-дублёр» ПоказатьВопрос(). Полный список этих методов можно посмотреть в документации Руководство разработчика, Приложение 13. Соответствие синхронных методов асинхронным аналогам.

Кроме документации метод-дублёр можно посмотреть и в синтакс-помощнике. Для каждого старого метода они указаны.

Пример использования этих методов есть, например, в разделе .

Автокликер для 1С

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

1 стартмани

Добавление расширения службы приложений в Package. appxmanifest

В проекте аппсервицепровидер откройте файл Package. appxmanifest в текстовом редакторе:

  1. Щелкните его правой кнопкой мыши в Обозреватель решений.
  2. Выберите Открыть с помощью.
  3. Выберите Редактор XML (текстовый).

Добавьте в элемент следующее расширение . В этом примере показано, как объявить службу и указать, что приложение является поставщиком службы приложений. Сама служба будет реализована в виде фоновой задачи. Проект приложения службы приложений предоставляет службу другим приложениям. Для имени службы мы рекомендуем использовать обратное доменное имя.

Обратите внимание, что префикс пространства имен и атрибут действительны, только если вы используете пакета Windows SDK 10.0.15063 или более поздней версии. Их можно удалить, если используется более ранняя версия SDK

Примечание

Пример приложения службы приложений в C++/WinRT и C# см. в разделе пример приложения службы приложений.

Атрибут идентифицирует это приложение как поставщика службы приложений.

Атрибут определяет квалифицированный класс пространства имен, реализующий службу, которая будет реализована далее.

Атрибут указывает, что каждый раз при вызове службы приложений необходимо, чтобы она выполнялась в новом процессе. это не является обязательным, но доступно вам, если вам нужны функциональные возможности и они предназначены для пакета SDK для 10.0.15063 (Windows 10 Creators Update) или более поздней версии. В качестве префикса следует использовать пространство имен .

Добавление разрешений для доступа к веб-API

В первом сценарии вы предоставляете клиентскому приложению доступ к вашему веб-API, который должен быть предварительно зарегистрирован. Если у вас еще нет зарегистрированных клиентского приложения и веб-API, выполните действия, описанные в двух статьях .

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

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

  1. Войдите на портал Azure.

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

  3. Выберите Azure Active DirectoryРегистрация приложений, а затем выберите свое клиентское приложение (а не свой веб-API).

  4. Выберите Разрешения APIДобавить разрешениеМои API.

  5. Выберите предварительно зарегистрированный веб-API.

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

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

  6. В разделе Выбор разрешений разверните ресурс, области которого определены для веб-API, и выберите разрешения, которым клиентское приложение должно обладать от имени пользователя, выполнившего вход.

    Если вы использовали примеры имен областей, указанные в предыдущем кратком руководстве, вы увидите имена Employees.Read.All и Employees.Write.All.
    Выберите Employees.Read.All или другое разрешение, которое могло быть создано заранее.

  7. Чтобы завершить процесс, выберите Добавление разрешений.

После добавления разрешений в API вы увидите выбранные разрешения в разделе Настроенные разрешения. На следующем рисунке показан пример делегированного разрешения Employees.Read.All, добавленного в регистрацию клиентского приложения.

Вы также можете увидеть разрешение User.Read для API Microsoft Graph. Это разрешение добавляется автоматически при регистрации приложения на портале Azure.

Использование фоновой обработки для сложных задач

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

Для этого вы можете использовать:

  1. Пользовательский Background Service — по умолчанию сервис запускается в потоке пользовательского интерфейса. Чтобы избежать блокировки, создайте Сервис с обработкой процесса в фоновом потоке.
  2. IntentService — подкласс сервиса, который последовательно выполняет запросы с помощью рабочего потока. Начиная с Android 8, использовать его не рекомендуется. Кроме того, IntentService устарел с Android 11.
  3. JobIntentService — замена IntentService. Вместо сервиса он использует JobScheduler для выполнения заданий. В более ранних версиях, чем Android 8, он будет действовать так же, как IntentService. Для получения дополнительной информации прочтите официальную документацию JobIntentService.
  4. Фоновая работа с WorkManager — это общая концепция фоновой работы в Android. Используйте его, когда вы захотите выполнять периодические процессы в будущем или когда у вас есть некоторые ограничения в работе приложения.

StartManager 1.4 — Развитие альтернативного стартера Промо

Очередная редакция альтернативного стартера, являющегося продолжением StartManager 1.3. Спасибо всем, кто присылал свои замечания и пожелания, и тем, кто перечислял финансы на поддержку проекта. С учетом накопленного опыта, стартер был достаточно сильно переработан в плане архитектуры. В основном сделан упор на масштабируемость, для способности программы быстро адаптироваться к расширению предъявляемых требований (т.к. довольно часто просят добавить ту или иную хотелку). Было пересмотрено внешнее оформление, переработан существующий и добавлен новый функционал. В общем можно сказать, что стартер эволюционировал, по сравнению с предыдущей редакцией. Однако пока не всё реализовано, что планировалось, поэтому еще есть куда развиваться в плане функциональности.

1 стартмани

Поиск модальных методов

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

В режиме 1С:Предприятие

Для того чтобы прямо в пользовательском режиме увидеть модальные вызовы конфигурации можно использовать свойство конфигурации «Режим использования модальности». Его нужно установить в значение «Использовать с предупреждением». Тогда в процессе работы прикладного решения будут выводиться сообщения каждый раз, как выполняется модальный метод. Но работе приложения это препятствовать не будет:

Проверка конфигурации в режиме Конфигуратор

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

Проверка конфигурации — Расширенная проверка — Поиск использования модальности:

Результат проверки будет выдан в окно служебных сообщений, из которого можно сразу же перейти в модуль, в котором находится данный метод:

Нужно отметить, что эта проверка обнаруживает не все возможные модальные вызовы, а только те, которые можно определить «наверняка». То есть это модальные методы глобального контекста и модальные методы тех объектов, тип которых однозначно определён в анализируемом контексте.

Поэтому, например, в приведённом примере проверка не обнаруживает модальное открытие диалога выбора цвета во вложенной процедуре. В контексте этой процедуры тип переменной «Диалог» неизвестен.

Проверка одного модуля

Можно найти все модальные вызовы в каком-либо одном модуле (начиная с версии 8.3.5). Для этого нужно открыть этот модуль и выполнить команду контекстного меню «Рефакторинг — Модальные вызовы — Найти модальные вызовы модуля» (эти же команды доступны из меню «Текст»):

В этом случае будут найдены все строки кода, которые приводят или могут привести к открытию модальных окон. В том числе и те строки, где открытие модального окна возможно, если объект имеет определённый тип:

Например, во вложенной процедуре в данном примере действительно будет открыто модальное окно для выбора цвета.

Если бы во вложенную процедуру в переменной «Диалог» передавалась бы выборка справочника, то, естественно, никакого модального вызова не было бы. Однако проверка всё равно отметила бы эту строку как «потенциально опасную».

Поэтому окончательное решение в таких случаях нужно принимать на основе визуального анализа алгоритма и типов используемых объектов.

Поиск с анализом возможности автоматического преобразования

Можно не только найти все модальные вызовы, но и оценить возможность их автоматического преобразования (начиная с версии 8.3.5). Оговоримся, что автоматическое преобразование выполняется не во всех случаях, подробнее об этом можно прочитать в разделе .

Анализ модальных вызовов выполняется для всей конфигурации командой «Конфигурация — Рефакторинг — Анализ модальных вызовов конфигурации»:

Перед выполнением анализа можно задать параметры. Они позволяют уточнить анализ и одновременно с анализом выполнить преобразование:

Со стандартными значениями (если ничего не менять) буду найдены только те вызовы модальных методов, которые удалось определить однозначно:

Если установить флажок «Отображать методы объектов неопределенного типа», то тогда будут показаны и те методы объектов, которые потенциально могут привести к открытию модальных окон. Это могут быть действительно модальные вызовы, а может быть и нет. Всё зависит от типа объекта, который нужно определять визуально, анализируя код программы:

В любом случае (с теми или иными параметрами анализа) результат будет содержать подробную информацию по каждому вызову с комментарием:

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

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

  • «Принадлежность не определена» — суть проблемы описана в разделе . Вы должны самостоятельно определить тип объекта и на основании этого понять, приводит ли его метод к модальному вызову, или нет.
  • ;
  • «Не поддерживается для процедур и функций глобального контекста» — суть проблемы описана в разделе . Нужно вручную определить модуль, в котором будет располагаться обработчик оповещения.
  • ;
  • ;

11 ответов

Лучший ответ

Начиная с Android Support Library 23,
новый добавлен в .

Его описание из официального JavaDoc:

Итак, просто позвоните :

Вы можете проверить .

1389

Community
20 Июн 2020 в 09:12

В Android Marshmallow многие методы устарели.

Например, чтобы получить цвет, используйте

Также, чтобы получить доступное использование

30

Marko
15 Окт 2015 в 06:11

Я не хочу включать библиотеку поддержки только для getColor , поэтому я использую что-то вроде

Я полагаю, что код должен работать нормально, а устаревший не может исчезнуть из API

И вот что я использую в Котлине:

49

Alex Vang
29 Апр 2020 в 12:00

ТЛ ; др :

Пояснение:

Вам нужно будет использовать , который является частью библиотеки поддержки V4 (он будет работать со всеми предыдущими API).

Если вы еще не используете библиотеку поддержки, вам нужно будет добавить следующую строку в массив внутри вашего приложения (примечание: это необязательно, если вы уже используете appcompat ( V7) библиотека ):

Если вам интересны темы, в документации указано, что:

511

Rafael Tavares
12 Мар 2020 в 05:25

Я тоже расстроился. Моя потребность была очень простой. Все, что мне нужно, это цвет ARGB из ресурсов, поэтому я написал простой статический метод.

Peter Mortensen
3 Дек 2016 в 07:41

Если вам не обязательно нужны ресурсы, используйте :

1

N. Osil
27 Апр 2018 в 03:22

Используйте метод для из библиотеки поддержки Android.

Думаю, он лучше отражает ваш вопрос, чем из , поскольку вы спрашиваете о . До уровня API 23 тема не будет применяться, а метод вызывает , но вы не получите предупреждения об устаревании. Тема также может быть .

1

Pedro
18 Ноя 2015 в 21:08

Если ваш текущий мин. Уровень API — 23, вы можете просто использовать , как мы используем, для получения строковых ресурсов с помощью :

Вы можете ограничить уровни API ниже 23:

Но для простоты вы можете сделать, как показано ниже, в качестве принятого ответа:

Из ресурсов.

Из ContextCompat AndroidX.

Из поддержки ContextCompat

2

Blasanka
11 Мар 2020 в 23:45

В Котлине вы можете:

Если requireContext () доступен из того места, где вы вызываете функцию. Я получал ошибку при попытке

4

Jamie
24 Июн 2020 в 18:04

В вашем RecyclerView в Котлине

4

Irvin Joao
10 Июл 2019 в 17:51

Для всех пользователей Kotlin:

30

halfer
21 Авг 2018 в 17:18

Сборка приложения для устройств Android, iOS и Windows (HTML/JavaScript)

Если вы разработчик веб-решений и знакомы с HTML и JavaScript, то вы можете создавать приложения для целевых платформ Windows, Android и iOS с помощью средств Visual Studio для Apache Cordova. Такие приложения могут быть ориентированы на все три платформы, и при их создании вы можете полагаться на привычные навыки и процедуры.

Apache Cordova — это платформа, включающая модель подключаемого модуля. Модель подключаемого модуля предоставляет единый API-интерфейс JavaScript, который можно использовать для доступа к собственным возможностям устройств на всех трех платформах (iOS, Android и Windows).

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

Чтобы приступить к работе, установите Visual Studio и выберите Разработка мобильных приложений на JavaScript во время установки. Инструменты Cordova автоматически установят любое стороннее программное обеспечение, необходимое для создания приложения для нескольких платформ.

После установки расширения откройте Visual Studio и создайте проект пустого приложения (Apache Cordova) . Затем можно разработать приложение с помощью JavaScript или TypeScript. Кроме того, можно добавлять подключаемые модули для расширения функциональности приложения, и API-интерфейсы из подключаемых модулей будут появляться в IntelliSense в ходе написания кода.

Когда вы будете готовы к запуску приложения и пошаговому выполнению кода, выберите эмулятор, например Apache Ripple или Android Emulator, браузер или устройство, подключенное непосредственно к компьютеру. Запустите приложение. Если вы разрабатываете приложение на компьютере Windows, можно запустить его прямо на нем. Все эти возможности встроены в Visual Studio в составе расширения «Инструменты Visual Studio для Apache Cordova».

Шаблоны проектов для создания приложений на универсальной платформе Windows (UWP) по-прежнему доступны в Visual Studio, и вы можете свободно использовать их, если планируете ориентироваться только на устройства Windows. Если впоследствии вы решите перейти к устройствам Android и iOS, то всегда сможете перенести свой код в проект Cordova.

Вопросы и ответы

Работа с политиками разрешений для приложений

Какие действия с приложениями влияют на политики разрешений?

Политики разрешений влияют на использование приложений, контролируя установку, обнаружение и взаимодействие с пользователями. Администраторы также могут управлять приложениями в Центре администрирования Microsoft Teams независимо от назначенных им политик разрешений.

Можно ли управлять бизнес-приложениями (LOB)?

Да, можно использовать политики разрешений для приложений, чтобы управлять внедрением и распространением пользовательских приложений (LOB). Можно создать настраиваемую политику или изменить глобальную политику, чтобы разрешать или блокировать настраиваемые приложения в зависимости от задач организации.

Можно использовать параметры в пределах организации на странице Управление приложениями или политики настройки приложений, чтобы ограничить передачу пользовательских приложений в организацию.

Чтобы запретить определенным пользователям передачу пользовательских приложений, используйте политики пользовательских приложений. Дополнительные сведения см. в статье Управление политиками и параметрами пользовательских приложений в Teams.

Да. Приложение блокируется для всех клиентов Teams.

Впечатления от использования

Что происходит если приложение заблокировано?

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

Например, если приложение заблокировано, пользователи не могут выполнять действия ниже:

  • Добавление приложения самостоятельно или в беседу или команду
  • Отправка сообщений боту приложения
  • Выполнение действий кнопок, которые отправляют информацию в приложение, например сообщения с действиями
  • Просмотр вкладок приложения
  • Настройка соединителей для получения уведомлений
  • Использование расширения для сообщений

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

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

Создание кросс-платформенной игры для устройств Android, iOS и Windows с использованием инструментов Visual Studio для Unity

Инструменты Visual Studio для Unity представляют собой бесплатное расширение Visual Studio, которое интегрирует мощные функции редактирования кода, повышения продуктивности и средства отладки в составе Visual Studio с Unity, популярной кроссплатформенной системой и средой разработки для игр и мощных графических приложений на платформах Windows, iOS, Android и других платформах, включая веб-приложения.

Средства Visual Studio для Unity (VSTU) позволяют использовать Visual Studio для создания сценариев игр и редакторов на языке C#, а затем использовать его мощный отладчик для поиска и исправления ошибок. В последнем выпуске VSTU реализована поддержка Unity 2018.1, включена цветовая маркировка синтаксиса для языка шейдера ShaderLab системы Unity, усовершенствована синхронизация с Unity, добавлены дополнительные функции отладки и улучшены механизмы создания кода благодаря использованию мастера MonoBehavior. VSTU также объединяет файлы проекта Unity, сообщения консоли и возможность запускать игру в Visual Studio, чтобы тратить меньше времени на переключение в редактор Unity Editor и из него при написании кода.

Дополнительные сведения
Подробнее об инструментах Visual Studio для Unity
Начало работы с инструментами Visual Studio для Unity
Читать о последних возможностях Visual Studio Tools для предварительной версии Unity 2.0 (блог Visual Studio)
(видео)
Сведения о Unity (веб-сайт Unity)

Определение Binder

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

Теперь, чтобы определить интерфейс, добавьте эти строки внизу класса:

MusicBinder вложен в другой класс и может получить доступ ко всем его методам. Он также может использовать все методы Binder. Внутри него вы создаете метод для получения контекста сервиса.

Выполнение в фоновом режиме

Начиная с Windows 10 версии 1607 приложения могут выполнять фоновые задачи в том же процессе, в котором работает само приложение. Подробнее об этом см. в статье . В этой статье мы не рассматриваем фоновую обработку с одним процессом, но следует отметить, что в жизненный цикл приложения добавлены два новых события, связанные с фоновым выполнением приложения. Это события EnteredBackground и LeavingBackground.

Они также отражают, может ли пользователь видеть интерфейс приложения.

Выполнение в фоновом режиме — это состояние по умолчанию запущенного, активируемого или возобновляемого приложения. В этом состоянии пользовательского интерфейс приложения еще не виден.

Контрольный список для отправки приложения

Ниже приведен список сведений, которые необходимо предоставить при создании отправки приложения, а также ссылки на дополнительные сведения.

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

Страница сведений о стоимости и доступности

Имя поля Примечания Дополнительные сведения
Рынки Параметр по умолчанию: «Все возможные страны». Определение цен и выбор страны
Аудитория Значение «Общедоступная аудитория» используется по умолчанию
Возможность обнаружения Параметр по умолчанию: «Сделать это приложение доступным и обнаруживаемым в Store».
Расписание Параметр по умолчанию: «Выпуск как можно скорее». Настройка точного расписания выпуска
Базовая цена Обязательно Настройка и планирование цены приложения
Пробная версия Параметр по умолчанию: «Без бесплатной пробной версии».
Цена продажи Необязательно Выставление приложений и надстроек на продажу
Организационное лицензирование По умолчанию: разрешить получение томов по организациям Параметры корпоративного лицензирования

Страница свойств

Имя поля Примечания Дополнительные сведения
Категория и подкатегория Обязательно Таблица категорий и подкатегорий
URL-адрес политики конфиденциальности Требуется для многих приложений. См. Соглашение с разработчиком приложений и
Веб-сайт Необязательно
Контактные данные службы поддержки Требуется, если ваш продукт доступен на консоли Xbox; в противном случае это необязательно (однако рекомендуется)
Игровые параметры Необязательно (применимо только к играм)
Режим отображения Необязательно
Объявления продукта По умолчанию: пользователи могут установить это приложение на съемный носитель или другой диск. Windows может включать данные этого приложения в автоматическое резервное копирование в OneDrive Объявления продукта
Требования к системе Необязательно
Имя поля Примечания Дополнительные сведения
Возрастные категории Обязательно Возрастные категории

Страница «Пакеты»

Имя поля Примечания Дополнительные сведения
Управление отправкой пакетов Обязательно (хотя бы один пакет) Отправка пакетов приложений
Доступность семейства устройств По умолчанию: зависит от пакетов Доступность семейства устройств
Постепенный выпуск пакета Необязательно (только для обновлений) Постепенный выпуск пакета
Обязательные обновления Необязательно (только для обновлений)

Описания в Магазине

Все необходимые сведения потребуются по крайней мере для одного из языков, поддерживаемых вашим приложением. Мы рекомендуем предоставить описание в Store на всех языках, поддерживаемых приложением. Вы также можете . Чтобы упростить управление несколькими описания одного и того же продукта, вы можете импортировать и экспортировать описания в Store.

Имя поля Примечания Дополнительные сведения
Описание Обязательно Создание отличного описания приложения
Новые возможности в этой версии Необязательно
Возможности приложения Необязательно
Снимки экрана Обязательный (по крайней мере один снимок экрана; рекомендуется — 4 или более)
Логотипы магазина Рекомендуется; требуется для некоторых версий ОС
Трейлеры Необязательно
Windows 10/11 и образ Xbox (16:9 супер hero art) Рекомендуемая
Образы Xbox Требуется для правильного вывода при публикации в Xbox
Дополнительные поля Необязательно
Условия поиска Необязательно
Сведения об авторском праве и товарном знаке Необязательно
Дополнительные условия лицензии Необязательно
Создано Необязательно

Страница «Параметры отправки»

Имя поля Примечания Дополнительные сведения
Параметры удержания публикации По умолчанию: опубликуйте эту отправку, как только она пройдет сертификацию (или в соответствии с датами, выбранными в разделе «Расписание»)
Заметки по сертификации Рекомендуемая Заметки по сертификации
Ограниченные возможности Требуется, если ваш продукт объявляет

Примечание

Сведения о публикации бизнес-приложений (LOB) непосредственно для предприятий см. в разделе Распространение бизнес-приложений для предприятий.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: