32 разрядные процессы не могут получить доступ к 64 разрядным процессором
В Windows при нормальных обстоятельствах 32-битный процесс может получить доступ только к 2 ГБ ОЗУ (или 3 ГБ с помощью специального переключателя в файле boot.ini). Сколько памяти доступно при запуске 32-битного процесса в 64-битной операционной системе? Есть ли какие-то специальные переключатели или настройки, которые могут это изменить?
Они по-прежнему ограничены 2 ГБ, поскольку многие приложения зависят от нулевого верхнего бита указателей.
Что ты имеешь в виду? Если вы создадите его самостоятельно, вы можете использовать флаг / LARGEADDRESSAWARE и заставить его работать с 4 ГБ, если вы этого не сделали, вы находитесь во власти разработчиков, которые это сделали.
Под этим - since many application depends on the top bit of pointers to be zero вы имеете в виду, что 32-й бит схемы адресации не учитывается и не используется при обходе адресного пространства процесса.
4 ГБ за вычетом того, что используется системой, если связать с / LARGEADDRESSAWARE.
Вы имеете в виду те 605 Кбайт DLL? Извините, я не понял этого, так как вопрос был больше о ГБ памяти.
Кажется, никто не касается того факта, что если у вас много разных 32-битных приложений, подсистема wow64 может отображать их в любом месте памяти выше 4G, поэтому в 64-битных окнах с достаточным объемом памяти вы можете запускать гораздо больше 32-битных приложений. чем на родной 32-битной системе.
Вы говорите о физической RAM, а OP говорит о виртуальной памяти. Даже в 32-битных системах вы можете запускать множество приложений, если ваш файл подкачки достаточно велик.
32-битный процесс по-прежнему ограничен теми же ограничениями в 64-битной ОС. Проблема в том, что указатели памяти имеют ширину всего 32 бита, поэтому программа не может назначить / разрешить любой адрес памяти, превышающий 32 бита.
Все, что вы слышите о специальных загрузочных флагах, 3 ГБ, /3GB переключателях или /userva о 32-разрядных операционных системах, неприменимо к 64-разрядной Windows.
Что касается 32-битных операционных систем, вопреки распространенному мнению, для 32-битных операционных систем нет физического ограничения в 4 ГБ. Например, 32-разрядные серверные операционные системы, такие как 32-разрядная версия Microsoft Windows Server 2008, могут получить доступ к 64 ГБ. (Windows Server 2008 Enterprise и Datacenter editions) - с помощью расширения физических адресов (PAE), которое впервые было введено Intel в Pentium Pro, а затем AMD в процессоре Athlon - он определяет трехуровневую иерархию таблиц страниц, с записями таблицы по 64 бита каждая вместо 32, что позволяет этим процессорам напрямую обращаться к физическому адресному пространству размером более 4 гигабайт - поэтому теоретически 32-битная ОС может получить доступ к 2 ^ 64 байтам теоретически или 17 179 869 184 гигабайтам, но сегмент ограничено 4 ГБ. Однако по маркетинговым причинам Microsoft ограничила максимально доступную память в несерверных операционных системах до 4 ГБ или даже 3 ГБ. Таким образом, один процесс может получить доступ к более чем 4 ГБ в 32-разрядной ОС - примером может служить сервер Microsoft SQL.
32-битные процессы в 64-битной Windows не имеют недостатков по сравнению с 64-битными процессами в использовании общего виртуального адресного пространства ядра (также называемого системным пространством ). Все процессы, будь то 64-битные или 32-битные, в 64-битной Windows используют одно и то же 64-битное системное пространство.
Учитывая тот факт, что системное пространство совместно используется всеми процессами , в 32-битной Windows процессы, которые создают большое количество дескрипторов (например, потоки, семафоры, файлы и т. Д.), Занимают системное пространство объектами ядра и могут исчерпать память даже если у вас много доступной памяти. Напротив, в 64-битной Windows пространство ядра является 64-битным и не ограничено 4 ГБ. Все системные вызовы, выполняемые 32-разрядными приложениями, преобразуются в собственные 64-разрядные вызовы в пользовательском режиме .
Добрый день ) Сегодня скачал и установил Qscalp в ознакомительном режиме. Настроил Квик по мануалу и видеоинструкциям,но уперся в подключение привода к Квику. В меню привода просто нет кнопки ПОДКЛЮЧЕНИЕ . Что делать?
Владимир
выставляешь заявку и видишь как она попадает в стакан спустя 2-3 секунды, сначала грешил на без проводную клаву, но потом выяснилось что это привод . Что с этим делать, как вылечить?
От настроек привода скорость не зависит — он всегда работает с максимально возможной скоростью. Время задержек передачи заявок в торгую систему вы можете проверить в протоколе работы. Как правило, основную задержку в процессе выставления заявки на биржу вносит брокер. Для ее уменьшения следует подключиться через другого брокера. Или использовать прямое подключение к бирже через Plaza2.
Да извиняюсь подключение через квик.
Добрый день. Николай помогите настроить привод, ну уже спасу нет как достали эти тормоза . выставляешь заявку и видишь как она попадает в стакан спустя 2-3 секунды, сначала грешил на без проводную клаву, но потом выяснилось что это привод . Что с этим делать, как вылечить? Спасибо.
Игорь
я установил QScalp Trust 5.0.165 и подключил его к Quik,
но не могу выставить заявку на покупку и продажу. Горит зеленый и желтый индикатор
Науруз
После обновления версии квика (версия 8.3.2.4) пишет в qscalp, что «32-х разрядные процессы не могут получить доступ в 64-х разрядным процессам»
Что делать подскажите?
Необходимо обновить QScalp до актуальной версии.
Андрей
мне пришлось обновить КВИК до 8 версии (старый то и дело зависал), но при этом перестал работать QScalp 5 версия. Возможно ли его обновление?
Конечно. Для этого скачайте дистрибутив QScalp актуальной версии и установите из него программу поверх старой.
Вопрос уже задавался, прошу прощения! Разобрался, все получилось
Здравствуйте, обновился Quik до 8 версии, я установил QScalp Trust 5.0.165 и подключил его к Quik,
но не могу выставить заявку на покупку и продажу. Горит зеленый и желтый индикатор. Счет также настроил.
Поддерживаю предыдущий вопрос. После обновления версии квика (версия 8.3.2.4) пишет в qscalp, что «32-х разрядные процессы не могут получить доступ в 64-х разрядным процессам»
Что делать подскажите?
Николай будьте добры подскажите пожалуйста: мне пришлось обновить КВИК до 8 версии (старый то и дело зависал), но при этом перестал работать QScalp 5 версия. Возможно ли его обновление? Я пенсионер только немного стало получаться торговать …
Заранее благодарю за ответ.
Владимир
При загрузке истории торгов с Цериха или Финама все загружается,но после загрузки доступны для просмотра кластеры с 21:50 до 23:50,более ранние не перелистываются.
Возможно, у вас в настройках набора кластеров задано ограничение максимального количества отображаемых кластеров (для набора «Интрадей» по умолчанию — 12). Увеличьте это значение до разумно необходимого.
Здравствуйте Николай.При загрузке истории торгов с Цериха или Финама все загружается,но после загрузки доступны для просмотра кластеры с 21:50 до 23:50,более ранние не перелистываются.
Максим
Не удалось установить связь с агентом
Необходимо установить и запустить агента QScalp в Квик, как это показано в руководстве пользователя.
Не вижу в данном ответе, какой-либо логической связи с обсуждаемым вопросом.
—
«Такие данные поступают к нам из торговой системы СПБ ИЦБ.»
Сергей
следует выставить заявку на покупку по цене 2р (или выше) или с отступом -10
В том то и дело, что при таком действии у меня идёт покупка именно по «плохой» цене, а лоты ниже остаются нетронутыми в стакане (quik, Сбербанк брокер)
Такого не может быть. Вы уверены, что торгуете на Московской бирже, а не на демо сервере или кухне? Продать вам актив по какой-то цене, не продав предварительно по более низкой, которая есть в стакане, никто не может. И это не зависит от чего бы то ни было — так работает биржа. Было бы странно, если бы можно было купить по 100 рублей, не купив перед этим то, что есть по 50 рублей.
следует выставить заявку на покупку по цене 2р (или выше) или с отступом -10
В том то и дело, что при таком действии у меня идёт покупка именно по «плохой» цене, а лоты ниже остаются нетронутыми в стакане (quik, Сбербанк брокер)
Андрей
Ответ от брокера:
В таблице обезличенных сделок по инструментам СПБ ИЦБ транслируется текущая цена рынка.
Не вижу в данном ответе, какой-либо логической связи с обсуждаемым вопросом. Вопрос был в том, что: а) время некоторых сделок неверное/они запаздывают; б) этих сделок не было вовсе. К текущей цене вообще никаких вопросов не было — это расчетный показатель, который к содержимому таблицы обезличенных сделок (в которой транслируются обезличенные сделки) никакого отношения не имеет.
Евгений
как получить ключ в Qscalp?
Владимир
Здравствуйте. При загрузке Qscalp не загружается главное окно с панелями инструментов. Загружаются торговые окна по инструментам и сам я рлык отображается в панели задач, а вот главного окна нет и перезагружал комп и на другой монитор окна перетаскивал, думал может закрыто каким нибудь торговым окном, но нет, нигде его нет. Что можно сделать?
Вопрос решил сменой разрешения одного из мониторов, главное окно было за панелью задач. Вопрос снят.
Здравствуйте. При загрузке Qscalp не загружается главное окно с панелями инструментов. Загружаются торговые окна по инструментам и сам я рлык отображается в панели задач, а вот главного окна нет и перезагружал комп и на другой монитор окна перетаскивал, думал может закрыто каким нибудь торговым окном, но нет, нигде его нет. Что можно сделать?
Здравствуите, как получить ключ в Qscalp?
Андрей
при выставлении автоматического стоп лосса с проставленной опцией «внешняя заявка» — как сделать, чтобы этот стоп отображался на графике в Квике, какие настройки Квика за это отвечают (включил опцию «внешней заявки», а на графике и в таблице заявок Квика по-прежнему ничего не отображается)?
Прежде всего, следует проверить в протоколе работы, действительно ли вы выставляете внешнюю стоп-заявку (эти действия помечаются там как «ExternalBuy»/»ExternalSell»). Возможно, тип «внешняя» был задан не для той стоп-заявки, которую вы выставляете.
Внешние стоп-заявки должны быть видны в таблице стоп-заявок Квика, в таблице заявок их, естественно нет. Если они там не отображаются, несмотря на то, что они внешние, возможно, в таблице настроен какой-то фильтр. Отобразить их на графике Квике, вероятно, можно, включив соответствующую опцию в настройках диаграммы — необходимо свериться с инструкцией Квика.
Перенос 32-битных Windows приложений на 64-битную машину может быть весьма проблематичным, если у вас есть 32-разрядные библиотеки DLL, которые вы не можете переписать и портировать для 64-bit. Майк Беккер покажет вам, как можно получить доступ к 32-bit DLL из 64-битного кода с помощью встроенных механизмов IPC.
64-разрядные технологии Microsoft впервые появились в Windows Server 2003 для процессоров Itanium 2 (архитектура ихвестна как "IA64") а также для eXtended CPUs (архитектура известна как "x64"). 64-bit технология имеет много преимуществ, но также поднимает новые вопросы для разработчиков программного обеспечения. Например, вам может понадобиться необходимость доступа к существующим 32-разрядным библиотекам DLL из 64-битного процесса.
Главное преимущество технологии 64-бит состоит в способности адресовать до 8 ТБ памяти, против максимальных 2 Гб для 32-битных процессов. Как результат, 64-разрядная технология позволяет проводить операции с большим объёмом данных в оперативной памяти без необходимости временного сброса памяти на жётский диск. Это может значительно повысить производительность и открыть новые алгоритмы обработки данных базирующихся на очень больших доступных объёмов оперативной памяти. Как бы то ни было аргументы для миграции существующего программного обеспечения на 64-битную платформу имеют место быть.
Многие приложения, написанные с помощью C/C++ могут быть легко портированы под 64-битную платформу, особенно если они написаны в виде монолитного модуля. Иногда достаточно просто пересобрать исходные коды с использованием x64/IA64 компилятора. Однако уже опубликованное или базирующееся на модулях ПО может вызвать проблемы.
Конфликт: 64-bit против 32-bit
Основная проблема миграции возникает при необходимости портирования 32-разрядных программных компонентов, которые не могут быть пересобраны, возможно, потому что исходный код потерян, к нему нет доступа или одна из зависимостей этого модуля не можeт быть перенесена на 64-bit платформу.
Например, 32-битный программный продукт содержит основной модуль WeatherReport (см. рисунок выше), который внутри обращается к DLL WeatherStationControl. Пока основной модуль и DLL являются 32-разрядными, продукт может работать как на 32-битных, так и 64-битных платформах (внутри WOW64). Если основной модуль и DLL переносятся на 64-битную платформу, то они могут работать в рамках 64-битных процессов. Однако, если только основной модуль переносится на 64-bit, он не сможет загружать 32-разрядные DLL.
Лучшим способом переноса такого продукта на 64-битную платформу является миграция как основного модуля, так и всех его зависимостей, но если хоть одна зависимая DLL не может быть перенесена, то продукт не может быть загружен в 64-битном процессе, следовательно приложение работать не будет.
Решение: суррогатный процесс
Эта проблема может быть решена путем загрузки зависимой 32-битной DLL в отдельном пространстве 32-разрядного процесса. Основной модуль, работая в качестве 64-битного процесса, может получить доступ к зависимым DLL'ям через границы процессов, используя IPC (Смотри MSDN reference).
64-битный процесс может получить доступ к 32-разрядной DLL используя механизмы межпроцессного взаимодействия. То бишь 32-разрядные DLL загружаются в отдельный 32-битный суррогатный процесс, и тогда 64-битное приложение использует встроенные механизмы IPC для того, чтобы обмениваться данными 32-битным процессом.
Это решение требует дополнительной работы, например необходимо создать 32-разрядный суррогатный процесс, который загрузит 32-разрядные DLL и предоставит API для работы с ними. Кроме того, некоторые изменения будет необходимо стелать со стороны 64-битного клиента, т.к. клиент будет вынужден использовать методы IPC вместо непосредственного доступа к 32-разрядной DLL. Стоит отметить, что, в крайнем случае, эта дополнительная работа может быть сравнима с работой, которую необходимо выполнить при разработке 64-разрядной версию 32-битной DLL с нуля.
Одним из возможных путей сокращения этих расходов является реализация 64-разрядной DLL обертки, которая предоставит те же функции, что и оригинальная 32-битная DLL. Эта обёртка уже внутри себя скроет детали IPC вызовов оригинальной 32-битной DLL, загруженной в 32-битный суррогатный процесс.
64-битная обёртка (WeatherStationControl64.DLL) экспортирует тот же интерфейс, что и оригинальная 32-битная DLL (WeatherStationControl.DLL), то бишь предоставляет главному модулю WeatherReport те же сервисы без необходимости внесения изменений в код модуля WeatherReport.
Основные затраты этого решения связаны с реализацией суррогатного процесса, загружающего 32-битную DLL и реализаццей 64-битной DLL оболочки. Фактически затраты будут зависеть от того, какая из IPC технологий будет использоваться для обмена данными между 64-битным и 32-битным процессами.
Использование COM для межпроцессного взаимодействия
Один из самых популярных методов IPC - это DCOM (Distributed COM). Первоначально разработанная для распределенных систем, DCOM по-прежнему поддерживается как на 64-битных платформах Windows. Модули COM могут быть собраны как 32-разрядные так и 64-разрядные. Единственным ограничением является то, что 64-битные и 32-битные модули не могут находиться в одном и том же процессе, следовательно они должны взаимодействовать через границы процессов. Это делается с помощью out-of-process (OOP) COM компонентов, следующим образом:
- Создаём 32-битный COM-Сервер, который загрузит 32-битную DLL и опубликует 32-bit DLL интерфейс как COM-интерфейс, реализованный внутри через делегирование к API исходной 32-битной DLL.
- Конфигурируем этот COM-Сервер для out-of-proc загрузки любым способом создания COM+ приложений (используя dllhost.exe в качестве суррогата).
Также можно реализовать этот COM-компонент как специальный COM-Сервер EXE, используя ATL COM Server в качестве хостящего процесса.
Можно также помеcтить этот COM-компонент внутрь Win32-сервиса. - Создаём 64-разрядную DLL оболочку, реализующую тот же интерфейс, как оригинальная 32-битная DLL. Обёртка будет импортировать COM-интерфейс из COM-объекта, созданного выше, и транслировать каждый API вызов в обращение к COM-интерфейсу, передавая параметры вызова и получая возвращаемые значения.
32-разрядная DLL (WeatherStationControl.DLL) используется СОМ-объектом (WeatherStationWrapper), который предоставляет интерфейс 32-битной DLL в качестве COM-интерфейса. 64-битная DLL обёртка (WeatherStationControl64.DLL) делает вызовы COM-интерфейса, которые уже делегируют всю работу оригинальным API вызовам исходной 32-битой DLL. Основной процесс (WeatherReport) использует интерфейс, предоставляемый 64-разрядной DLL обёрткой, но на самом деле работа выполняется в оригинальной 32-битной DLL.
Это решение должно быть значительно дешевле, чем создание 64-разрядную версию 32-битных DLL с нуля. Библиотека ATL, поддерживающаяся Visual Studio, вкупе со всеми своими визардами и готовыми фрагментами кода, также должны помочь снизить затраты миграции за счет экономии времени и снижения вероятности ошибок.
Последствия
Однако существует ряд вещей, которые вам все еще нужно иметь в виду:
2 комментария:
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Предоставляет доступ к локальным и удаленным процессам и позволяет запускать и останавливать локальные системные процессы.
Дополнительные рекомендации
Свойства
Получает базовый приоритет связанного процесса.
Возвращает значение, показывающее, может ли компонент вызывать событие.
Возвращает объект IContainer, который содержит коллекцию Component.
Возвращает значение, указывающее, находится ли данный компонент Component в режиме конструктора в настоящее время.
Получает или задает значение, указывающее, следует ли вызывать событие Exited при прекращении процесса.
Возвращает список обработчиков событий, которые прикреплены к этому объекту Component.
Получает значение, заданное связанным процессом при завершении.
Получает время завершения связанного процесса.
Получает собственный дескриптор связанного процесса.
Получает число дескрипторов, открытых процессом.
Получает значение, определяющее завершение связанного процесса.
Получает уникальный идентификатор связанного процесса.
Получает имя компьютера, на котором выполняется связанный процесс.
Получает главный модуль связанного процесса.
Получает дескриптор главного окна связанного процесса.
Получает заголовок главного окна процесса.
Получает или задает максимальный допустимый размер рабочего множества (в байтах) для связанного процесса.
Возвращает или задает минимальный допустимый размер рабочего множества (в байтах) для связанного процесса.
Получает модули, которые были загружены связанным процессом.
Возвращает объем невыгружаемой системной памяти в байтах, выделенной для связанного процесса.
Возвращает объем невыгружаемой системной памяти в байтах, выделенной для связанного процесса.
Возвращает объем выгружаемой системной памяти в байтах, выделенной для связанного процесса.
Возвращает объем выгружаемой системной памяти в байтах, выделенной для связанного процесса.
Возвращает объем выгружаемой системной памяти в байтах, выделенной для связанного процесса.
Возвращает объем выгружаемой системной памяти в байтах, выделенной для связанного процесса.
Получает максимальный объем памяти в байтах в файле подкачки виртуальной памяти, используемой связанным процессом.
Получает максимальный объем памяти в байтах в файле подкачки виртуальной памяти, используемой связанным процессом.
Получает максимальный объем виртуальной памяти (в байтах), используемой связанным процессом.
Получает максимальный объем виртуальной памяти (в байтах), используемой связанным процессом.
Возвращает максимальный размер рабочего множества для связанного процесса (в байтах).
Получает максимальный объем физической памяти (в байтах), используемой связанным процессом.
Возвращает или задает значение, указывающее, должна ли операционная система временно увеличить приоритет связанного процесса, когда основное окно процесса получит фокус.
Возвращает или задает общую категорию приоритета для процесса.
Получает объем закрытой системной памяти в байтах, выделенной для связанного процесса.
Получает объем закрытой системной памяти в байтах, выделенной для связанного процесса.
Получает права доступа на время процессора для этого процесса.
Получает имя процесса.
Получает или задает процессоры, на которых может быть запланировано выполнение потоков данного процесса.
Получает значение, указывающее, отвечает или нет пользовательский интерфейс.
Получает собственный дескриптор процесса.
Получает идентификатор сеанса служб терминалов для связанного процесса.
Получает или задает ISite объекта Component.
Получает поток, используемый для чтения вывода ошибок приложения.
Получает поток, используемый для записи ввода приложения.
Получает поток, используемый для чтения текстовых выходных данных приложения.
Получает или задает свойства для передачи их методу Start() объекта Process.
Получает время запуска связанного процесса.
Получает или задает объект, используемый для маршалинга вызовов обработчика событий, происходящих в результате события завершения процесса.
Получает множество потоков, выполняющихся в связанном процессе.
Получает полное время процессора для этого процесса.
Получает пользовательское время процессора для этого процесса.
Получает размер виртуальной памяти процесса (в байтах).
Возвращает объем виртуальной памяти в байтах, выделенной для связанного процесса.
Возвращает использование физической памяти связанного процесса (в байтах).
Получает объем физической памяти в байтах, выделенной для связанного процесса.
Рекомендации по производительности программы
Подсистема WOW64 создает 32-разрядную среду на основе 64-разрядных версий Windows. Некоторые 32-разрядные программы могут выполняться в этих операционных системах медленнее, чем в 32-разрядных Windows. Кроме того, некоторые 32-разрядные программы, для которых требуется много памяти, могут повысить производительность в версиях 64-разрядных Windows. Это увеличение производительности происходит из-за того, что версии Windows x64 поддерживают больше физической памяти, чем 32-разрядные версии Windows.
Дополнительные сведения о различиях в управлении памятью между 64-разрядной и 32-разрядной версиями Windows см. в разделе "Виртуальное адресное пространство" раздела "Управление памятью" документации по пакету SDK для платформы Майкрософт. Чтобы просмотреть этот документ, посетите следующий веб-сайт Майкрософт: виртуальное адресное пространство
16-разрядные программы
64-разрядные версии Windows не поддерживают 16-разрядные или 16-разрядные компоненты программы. Эмуляция программного обеспечения, необходимая для запуска 16-разрядных программ в версии 64-разрядной Windows значительно снижает производительность этих программ.
16-разрядный установщик часто используется для установки и настройки 32-разрядной программы. Кроме того, для правильной работы некоторых 32-разрядных программ требуются 16-разрядные компоненты. Хотя 32-разрядные программы, для которых требуются 16-разрядные компоненты, могут выполняться правильно после их установки, вы не можете использовать 16-разрядный установщик для установки 32-разрядной программы. Программы, для которых требуются 16-разрядные компоненты, не могут выполняться в версиях 64-разрядных Windows.
Проверка версии
Некоторые 32-разрядные программы проверяют сведения о версии операционной системы. Многие 32-разрядные программы, которые выполняют эту проверку, не распознают версии 64-разрядных Windows как совместимые операционные системы. В этом случае 32-разрядная программа создаст ошибку проверки версии, а затем закроется. В таком случае обратитесь к производителю 32-разрядной программы для обновления, совместимого с версиями x64 Windows.
Комментарии
Компонент Process предоставляет доступ к процессу, который выполняется на компьютере. Процесс, упрощенно говоря, представляет из себя работающее приложение. Поток — это базовая единица, которой операционная система выделяет время процессора. Поток может исполнять любую часть кода процесса, включая части, выполняющиеся в данный момент другим потоком.
Компонент Process — это полезное средство для запуска, остановки, контроля и мониторинга приложений. Компонент Process можно использовать для получения списка запущенных процессов или для запуска нового процесса. Process используется для доступа к системным процессам. После инициализации компонента Process его можно использовать для получения сведений о запущенном процессе. Эти сведения включают в себя набор потоков, загруженные модули (файлы .dll и .exe) и информацию о производительности, например объем памяти, используемой процессом.
32-разрядные процессы не могут получить доступ к модулям 64-разрядных процессов. При попытке получить сведения о 64-разрядном процессе из 32-разрядного процесса вы получите исключение Win32Exception. С другой стороны, 64-разрядный процесс может получить доступ к модулям 32-разрядного процесса.
Компонент Process получает сведения о группе свойств одновременно. После того, как компонент Process получит информацию о хотя бы одном члене любой группы, он будет кэшировать значения для других свойств в этой группе и не будет получать новые сведения о других членах группы до вызова метода Refresh. Таким образом, значение свойства не обязательно будет новее, чем в момент последнего вызова метода Refresh. Схемы разделения на группы зависят от операционной системы.
Если в системе объявлен заключенный в кавычки путь в переменной path, при запуске любого процесса из этого расположения необходимо указание полного пути. В противном случае система не найдет этот путь. Например, если в переменной path нет пути c:\mypath и он добавляется к ней с использованием кавычек ( path = %path%;"c:\mypath" ), при запуске любого процесса из c:\mypath необходимо полностью указывать путь к файлу.
Системный процесс однозначно идентифицируется в системе идентификатором процесса. Как и многие ресурсы Windows, процесс также идентифицируется его дескриптором, который не обязательно является уникальным в пределах одного компьютера. Дескриптор — это универсальный термин, обозначающий идентификатор ресурса. Операционная система сохраняет дескриптор процесса, доступный через свойство Handle компонента Process, даже после завершения процесса. Таким образом, можно получить административную информацию о процессе, например ExitCode (обычно ноль в случае успешного завершения или ненулевой код ошибки) и ExitTime. Дескрипторы являются чрезвычайно важным ресурсом, поэтому утечка дескрипторов более опасна, чем утечка памяти.
Этот класс содержит требования связывания и наследования на уровне класса, которые применяются ко всем элементам. Если непосредственно вызывающий оператор или производный класс не имеет разрешения полного доверия, возникает исключение SecurityException. Дополнительные сведения о требованиях безопасности см. в разделе Требования связывания.
Если объект Process зависит от конкретных кодовых страниц, вы можете по-прежнему сделать их доступными, выполнив указанные ниже действия перед вызовом любых методов класса Process:
Добавьте в проект ссылку на сборку System.Text.Encoding.CodePages.dll.
Передайте объект EncodingProvider в метод Encoding.RegisterProvider, чтобы сделать доступными дополнительные кодировки, поддерживаемые поставщиком кодировки.
Класс Process будет автоматически использовать кодировку системы по умолчанию вместо UTF8 при условии, что вы зарегистрировали поставщик кодировки перед вызовом любых методов класса Process.
Конструкторы
Инициализирует новый экземпляр класса Process.
Консоль управления Майкрософт (MMC)
В 64-разрядных версиях Windows 64-разрядная версия консоли управления Майкрософт (MMC) для запуска различных оснастк. Однако иногда для запуска оснастки в подсистеме WOW64 может потребоваться 32-разрядная версия MMC. Дополнительные сведения о поведении MMC в 64-разрядных версиях Windows см. в разделе "Выполнение 32-разрядных и 64-разрядных оснастк в 64-разрядных Windows" в разделе "Использование MMC 2.0" документации по пакету SDK для платформы Майкрософт. Чтобы просмотреть этот документ, посетите следующий веб-сайт Майкрософт: запуск 32-разрядных и 64-разрядных оснастки в 64-разрядных Windows
Opengl
Версии x64-Windows не включают графический драйвер OpenGL. Обратитесь к производителю устройства для драйвера, совместимого с версиями x64 Windows.
Перенаправление реестра и файлов
Подсистема WOW64 изолирует 32-разрядные двоичные файлы от 64-разрядных двоичных файлов путем перенаправления вызовов реестра и некоторых вызовов файловой системы. Подсистема WOW64 изолирует двоичные файлы, чтобы предотвратить случайный доступ 32-разрядного двоичного файла к данным из 64-разрядного двоичного файла. Например, 32-разрядный двоичный файл, который запускает файл .dll из папки %systemroot%\System32, может случайно попытаться получить доступ к 64-разрядному .dll-файлу, который несовместим с 32-разрядным двоичным файлом. Чтобы избежать этого, подсистема WOW64 перенаправляет доступ из папки %systemroot%\System32 в папку %systemroot%\SysWOW64. Это перенаправление предотвращает ошибки совместимости, так как для работы с 32-разрядными программами требуется, чтобы файл .dll был специально разработан для работы с 32-разрядными программами.
Дополнительные сведения о перенаправлении файловой системы и реестра см. в разделе "Запуск 32-разрядных приложений" в разделе 64-разрядных Windows документации по пакету SDK для платформы Майкрософт. Чтобы просмотреть этот документ, посетите следующий веб-сайт Майкрософт: запуск 32-разрядных приложений
Подсистема WOW64 перенаправляет 32-разрядные двоичные вызовы без внесения изменений в 32-разрядные двоичные файлы. Однако при выполнении некоторых задач может появиться свидетельство этого перенаправления. Например, если ввести скрипт командной строки в 64-разрядной командной строке, командная строка не сможет получить доступ к 32-разрядным программам в папке Program Files. Подсистема WOW64 перенаправляет и устанавливает 32-разрядные программы в папке Program Files (x86). Чтобы получить доступ к правильной папке, необходимо изменить скрипт командной строки. Кроме того, необходимо ввести скрипт командной строки в 32-разрядной командной строке. 32-разрядная командная строка автоматически перенаправляет вызовы файловой системы в правильный 32-разрядный каталог.
Чтобы запустить 32-разрядную командную строку, выполните следующие действия.
- Нажмите **кнопку "**Пуск", нажмите кнопку "Выполнить", введите %windir%\SysWoW64\cmd.exe и нажмите кнопку "ОК".
Рекомендации по использованию x64
64-разрядные версии Windows поддерживают 32-разрядные и 64-разрядные инструкции. Подсистема WOW64 может запускать 32-разрядные программы в собственном 64-разрядном режиме, переключая собственный режим процессора. Отдельные аппаратные или программные уровни не требуются. При запуске 32-разрядной программы на основе 64-разрядных версий Windows может возникнуть снижение производительности.
Для получения дополнительных сведений о производительности процессора на основе x64 обратитесь к производителю процессора или посетите веб-сайт производителя. Сведения и решение в этом документе представляют текущее представление корпорации Майкрософт об этих проблемах на дату публикации. Это решение доступно через корпорацию Майкрософт или стороннего поставщика. Корпорация Майкрософт не рекомендует никаких сторонних поставщиков или сторонних решений, которые могут быть описаны в этой статье. В этой статье также могут быть другие сторонние поставщики или сторонние решения, которые не описываются в этой статье. Так как корпорация Майкрософт должна реагировать на изменение условий рынка, эти сведения не должны интерпретироваться как обязательства корпорации Майкрософт. Корпорация Майкрософт не может гарантировать или поддерживать точность какой-либо информации или любого решения, представленного корпорацией Майкрософт или любым упомянутым сторонним поставщиком.
Корпорация Майкрософт не предоставляет никаких гарантий и исключает все представления, гарантии и условия, как явные, подразумеваемые, так и предусмотренные. К ним относятся, но не ограничиваются представлениями, гарантиями или условиями заголовка, отсутствием нарушения прав, удовлетворительным условием, удобством продажи и пригодности для определенной цели в отношении любой службы, решения, продукта или любых других материалов или информации. Корпорация Майкрософт ни в каких событиях не несет ответственность за любое стороннее решение, упоминающееся в этой статье.
Введение
64-разрядные версии Microsoft Windows оптимизированы для запуска собственных 64-разрядных программ. Кроме того, 64-разрядные версии Windows используют подсистему WOW64 для запуска 32-разрядных программ.
32-разрядные драйверы
64-разрядные версии Windows не поддерживают 32-разрядные драйверы. Все драйверы аппаратных устройств и программные драйверы должны компилироваться специально для версии x64 Windows.
Если 32-разрядная программа пытается установить 32-разрядный драйвер на компьютере с версией Windows x64, установка драйвера завершается ошибкой. В этом случае версия 64-разрядной Windows сообщает об ошибке в 32-разрядную программу.
Методы
Начинает операции асинхронного чтения с перенаправленного потока StandardError приложения.
Начинает операции асинхронного чтения с перенаправленного потока StandardOutput приложения.
Отменяет операцию асинхронного чтения в перенаправленном потоке StandardError приложения.
Отменяет операцию асинхронного чтения в перенаправленном потоке StandardOutput приложения.
Освобождает все ресурсы, связанные с этим компонентом.
Создает объект, который содержит всю необходимую информацию для создания прокси-сервера, используемого для взаимодействия с удаленным объектом.
Выполняет определяемые приложением задачи, связанные с удалением, высвобождением или сбросом неуправляемых ресурсов.
Освобождает все ресурсы, занятые модулем Component.
Освобождает все ресурсы, используемые этим процессом.
Помещает компонент Process в состояние взаимодействия с работающим системным процессом, выполняющимся в специальном режиме путем включения встроенного свойства SeDebugPrivilege в данном потоке.
Определяет, равен ли указанный объект текущему объекту.
Получает новый компонент Process и связывает его с активным в данный момент процессом.
Служит хэш-функцией по умолчанию.
Извлекает объект обслуживания во время существования, который управляет политикой времени существования данного экземпляра.
Возвращает новый компонент Process, по заданному идентификатору процесса на локальном компьютере.
Возвращает новый компонент Process по заданному идентификатору процесса и имени компьютера в сети.
Создает новый компонент Process для каждого ресурса процесса на локальном компьютере.
Создает новый компонент Process для каждого ресурса процесса на указанном компьютере.
Создает массив из новых компонентов Process и связывает их со всеми ресурсами процесса на локальном компьютере, для которых заданное имя процесса является общедоступным.
Создает массив из новых компонентов Process и связывает их со всеми ресурсами процесса на удаленном компьютере, для которых заданное имя процесса является общедоступным.
Возвращает объект, представляющий службу, предоставляемую классом Component или классом Container.
Возвращает объект Type для текущего экземпляра.
Получает объект службы времени существования для управления политикой времени существования для этого экземпляра.
Немедленно останавливает связанный процесс.
Немедленно останавливает связанный процесс и, при необходимости, его дочерние процессы.
Выбирает компонент Process из состояния, позволяющего ему взаимодействовать с процессами операционной системы, запущенными в специальном режиме.
Создает неполную копию текущего объекта Object.
Создает неполную копию текущего объекта MarshalByRefObject.
Удаляет любые кэшированные внутри компонента процесса сведения о связанном процессе.
Запускает (или повторно использует) ресурс процесса, определенный свойством StartInfo этого компонента Process, и связывает его с компонентом.
Запускает ресурс процесса, определенный параметром, содержащим стартовую информацию процесса (например, имя файла запускаемого процесса), и связывает ресурс с новым компонентом Process.
Запускает ресурс процесса путем указания имени документа или файла приложения и связывает ресурс с новым компонентом Process.
Запускает ресурс процесса путем указания имени приложения и набора аргументов командной строки.
Запускает ресурс процесса путем указания имени приложения и набора аргументов командной строки и связывает ресурс с новым компонентом Process.
Запускает ресурс процесса путем указания имени приложения, имени пользователя, пароля и домена и связывает ресурс с новым компонентом Process.
Запускает ресурс процесса путем указания имени приложения, набора аргументов командной строки, имени пользователя, пароля и домена и связывает ресурс с новым компонентом Process.
Преобразует имя процесса в строку, объединенную с родительским типом компонента, если это применимо.
Возвращает строку, представляющую текущий объект.
Дает компоненту Process команду ожидать завершения связанного процесса в течение неограниченного времени.
Дает компоненту Process команду ожидать завершения связанного процесса в течение указанного времени в миллисекундах.
Указывает компоненту процесса ожидать завершения связанного процесса или отмены cancellationToken .
Примеры
В следующем примере для запуска процесса используется экземпляр класса Process.
В следующем примере для запуска процесса используется сам класс Process и его статический метод Start.
Код функции runProc был написан ImaginaryDevelopment и доступен на условиях лицензии Microsoft Public License.
Аннотация
64-разрядные версии Windows используют подсистему Microsoft Windows-32-on-Windows-64 (WOW64) для запуска 32-разрядных программ без изменений. 64-разрядные версии Windows не поддерживают 16-разрядные двоичные файлы или 32-разрядные драйверы. Программы, зависят от 16-разрядных двоичных файлов или 32-разрядных драйверов, не могут работать в 64-разрядных версиях Windows если производитель программы не предоставляет обновление для программы.
Могут возникнуть вопросы, влияющие на совместимость или производительность программы. Вы можете определить, будет ли программа иметь проблемы совместимости или производительности, протестировать программу в одной из 64-разрядных версий Windows.
В этой статье описываются некоторые рекомендации по совместимости при запуске 32-разрядных программ в 64-разрядных версиях Windows. В этой статье не сравниваются 32-разрядные и 64-разрядные версии Windows или другие 64-разрядные операционные системы. В этой статье предполагается, что вы понимаете разницу между 32-разрядными и 64-разрядными двоичные файлы.
Выполнение 32-разрядных программ
Подсистема WOW64 позволяет запускать 32-разрядные программы без изменений в версиях 64-разрядных Windows. Подсистема WOW64 делает это, создавая 32-разрядную среду на основе 64-разрядных версий Windows. Дополнительные сведения о подсистеме WOW64 см. в разделе "Выполнение 32-разрядных приложений" в разделе 64-разрядных Windows документации по пакету SDK для платформы Майкрософт. Чтобы просмотреть этот документ, посетите следующий веб-сайт Майкрософт: запуск 32-разрядных приложений.
События
Возникает при удалении компонента путем вызова метода Dispose().
Происходит, когда приложение выполняет запись в свой перенаправленный поток StandardError.
Происходит при завершении процесса.
Происходит, когда приложение записывает строку в свой перенаправленный поток StandardOutput.
В этой статье рассматриваются вопросы совместимости и ограничения для 32-разрядных программ, работающих в 64-разрядных версиях Windows.
Применимо к следующим выпускам: Windows 10 – все выпуски, Windows Server 2012 R2
Исходный номер базы знаний: 896456
Ограничения подсистемы WOW64
Подсистема WOW64 не поддерживает следующие программы:
- Программы, скомпилированные для 16-разрядных операционных систем
- Программы в режиме ядра, скомпилированные для 32-разрядных операционных систем
Ссылки
Дополнительные сведения об обработчике AMD64 см. на следующем веб-сайте advanced Micro Devices: AMD Website
Контактные данные сторонних организаций предоставлены в этой статье с целью помочь пользователям получить необходимую техническую поддержку. Эти данные могут быть изменены без предварительного уведомления. Корпорация Майкрософт не дает гарантий относительно правильности приведенных контактных данных сторонних производителей.
Дополнительные сведения о разработке программ для версий Windows Server 2003 на основе Itanium и Windows XP см. на следующем веб-сайте Майкрософт: введение в разработку приложений для 64-разрядной версии Windows
В этой статье упомянуты программные продукты независимых производителей. Корпорация Майкрософт не дает никаких явных, подразумеваемых и прочих гарантий относительно производительности или надежности этих продуктов.
Читайте также: