Delphi

Пример createprocess delphi: Блог GunSmoker-а: Этот проблемный CreateProcess…

Содержание

Лабораторная работа № 3

СОЗДАНИЕ ПРОЦЕССОВ И ПОТОКОВ

3.1.Цель работы

Целью работы является изучение основных принципов организации многозадачных операционных систем. Все многозадачные операционные системы используют концепцию процесса и потока. В данной работе рассматриваются следующие вопросы:

  • Чередование выполнения нескольких процессов с целью повышения степени использования процессора;

  • Разделение ресурсов между процессами;

  • Организация обмена данными между процессами и потоками;

  • Изменение класса приоритета процесса и уровня приоритета потока.

3.2. Теоретическое введение

В теоретическом введении рассматриваются процедуры и функции ядра ОС Windows, применяемые для работы с процессами и потоками.

3.2.1. Создание процесса

Для создания процесса используется функция CreateProcess, имеющая следующий вид:

function CreateProcess (lpApplicationName: PChar; lpCommandLine: PChar;

lpProcessAttributes, lpThreadAttributes: PSecurityAttributes;

bInheritHandles: BOOL; dwCreationFlags: DWORD;

lpEnvironment: Pointer; lpCurrentDirectory: PChar;

const lpStartupInfo: TStartupInfo;

var lpProcessInformation: TProcessInformation): BOOL; stdcall;

Входные параметры данной функции перечислены в таблице 3. 1.

Таблица 3.1.

Параметры функции CreateProcess

Параметр

Описание

1

2

lpApplicationName

Имя исполняемого файла

lpCommandLine

Командная строка, передаваемая создаваемому процессу.

lpProcessAttributes

Определяют наследование дочерним процессом свойств родительского процесса. Обычно lpProcessAttributes и lpThreadAttributes устанавливают равным nil, а bInheritHandles =false.

lpThreadAttributes

bInheritHandles

dwCreationFlags

Флаги, определяющие характеристики данного процесса. Например, его приоритет.

lpEnvironment

Указывает на блок памяти, хранящий строки переменных окружения. Обычно устанавливают в nil.

lpCurrentDirectory

Строка, определяющая текущий каталог и диск. Если этот параметр — nil, рабочий каталог нового процесса будет тем же, что и у приложения породившего его.

lpStartupInfo

Указатель на структуру TStartupInfo. Из всех полей данной структуры обязательным является только заполнение поля cb- размер в байтах данной структуры.

lpProcessInformation

Указатель на структуру TProcessInformation, из которой родительский процесс может получить данные о создаваемом процессе.

Структура TStartupInfo имеет следующий вид:

TStartupInfo = record

cb: DWORD; lpReserved: Pointer; lpDesktop: Pointer;

lpTitle: Pointer; dwX: DWORD; dwY: DWORD;

dwXSize: DWORD; dwYSize: DWORD;

dwXCountChars: DWORD; dwYCountChars: DWORD;

dwFillAttribute: DWORD; dwFlags: DWORD;

wShowWindow: Word; cbReserved2: Word; lpReserved2: Byte;

hStdInput: THandle; hStdOutput: THandle; hStdError: THandle;

end;

Описание полей структуры TStartupInfo приведены в таблице 3. 2.

Таблица 3.2.

Основные поля структуры TStartupInfo

Поле

Описание

1

2

cb

Размер структуры в байтах. Служит для контроля версий.

lpReserved

Зарезервировано

lpDesktop

Определяет имя рабочего стола, на котором запускается приложение.

lpTitle

Используется для консольных приложений и определяет заголовок консольного окна. Если этот параметр – nil, то в заголовок выводится имя исполняемого файла.

dwX , dwY

X иY координаты левого верхнего угла окна приложения. Измеряется в пикселях

dwXSize, dwYSize

Ширина и высота (в пикселях) окна приложения

dwXCountChars,

dwYCountChars

Определяют ширину и высоту (в символах) консольных окон

dwFillAttribute

Задает цвет текста и фона в консольных приложениях

dwFlags

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

wShowWindow

Определяет вид окна приложения

cbReserved2

Зарезервировано

lpReserved2

Зарезервировано

hStdInput,

hStdOutput

hStdError

Описатели буферов для консольного ввода/вывода

Структура TProcessInformation имеет следующий вид:

TProcessInformation =record

hProcess: THandle; hThread: THandle;

dwProcessId: DWORD; dwThreadId: DWORD;

end;

Описание полей структуры TProcessInformation приведены в таблице 3. 3. Структура TProcessInformation содержит выходные данные и заполняется функцией CreateProcess.

Таблица 3.3.

Основные поля структуры TProcessInformation

Поле

Описание

hProcess

Дескриптор созданного процесса

hThread

Дескриптор первичного потока

dwProcessId

Идентификатор процесса

dwThreadId

Идентификатор первичного потока

Если функция CreateProcess успешно выполнена, она возвращает ненулевое значение (true). Если произошла ошибка – возвращается 0 (false). Тогда информацию об ошибке можно получить, вызвав функцию GetLastError.

Глава 10 Окна других приложений. Delphi. Трюки и эффекты

Глава 10 Окна других приложений. Delphi. Трюки и эффекты

ВикиЧтение

Delphi. Трюки и эффекты
Чиртик Александр Анатольевич

Содержание

Глава 10 Окна других приложений

• Ловушки Windows

• Программа «Оконный шпион»

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

Но обо всем по порядку.

Данный текст является ознакомительным фрагментом.

Глава 3. На других посмотреть и себя показать

Глава 3. На других посмотреть и себя показать Интернет позволяет обмениваться не только текстовой информацией, но и мультимедийной. Самый популярный и демократичный контент такого рода – фотографии, или, как их часто называют, фотки. Как только цифровые фотоаппараты из

Глава 9. Wi-Fi для PDA и других карманных устройств

Глава 9. Wi-Fi для PDA и других карманных устройств Wi-Fi-сети не ограничиваются полноразмерными компьютерами, работающими под полномасштабными операционными системами. В наши дни Palm, Handspring Visor, КПК и другие карманные персональные цифровые помощники — personal digital assistants (PDA) —

Глава 18 Центр приложений Ubuntu

Глава 18 Центр приложений Ubuntu Центр приложений позволяет вам легко устанавливать и удалять программы, а также выполнять поиск по названиям и описаниям среди доступных приложений. Найти его очень просто, он находится в самом низу меню «Приложения». Запустив его вы увидите

Глава 30 Автозапуск приложений

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

Скрытие вкладок и других элементов диалогового окна

Скрытие вкладок и других элементов диалогового окна Теперь поговорим о параметрах реестра Windows, предназначенных для скрытия различных вкладок стандартных диалогов. В данном разделе книги не будут упоминаться параметры, используемые консолью mmc.exe, — этому посвящена

Глава 19 Написание CGI-приложений

Глава 19 Написание CGI-приложений Постановка задачи Разработать CGI-сценарий на Delphi. В качестве примера, при активации через форму сценарий будет выводить определенную

ГЛАВА 14. Создание многопоточных приложений

ГЛАВА 14. Создание многопоточных приложений В  предыдущей главе мы рассмотрели взаимосвязь между процессами, доменами приложения и контекстами. В этой мы выясним, как в рамках платформы .NET строить многопоточные приложения и как в условиях множества потоков

Глава 7 Разработка приложений

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

Запуск других приложений

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

Глава 9 Установка приложений в Ubuntu

Глава 9 Установка приложений в Ubuntu 9.1. Об установке программ в Linux В Windows все это достаточно просто — запустил установочный файл, который, как правило, называется setup.exe или install.exe, пару раз нажал кнопку Далее, и программа установлена. В Linux все немного иначе. Программа может

Глава 4 Настройка популярных приложений

Глава 4 Настройка популярных приложений • Internet Explorer• Почта Windows• Проигрыватель Windows Media• Другие стандартные программыДанная глава посвящена описанию трюков, позволяющих производить нестандартную настройку и изменение привычных режимов работы некоторых наиболее

Глава 7 Конвертирование баз данных из других программных сред

Глава 7 Конвертирование баз данных из других программных сред Мы уже говорили о том, что по мере появления новых, более совершенных СУБД все актуальнее становится проблема использования данных, которые накоплены в информационных банках предыдущих, в том числе и морально

ГЛАВА 9 Модули приложений SAP R/3

ГЛАВА 9 Модули приложений SAP R/3 В этой главе представлены различные бизнес-функциональности системы SAP R/3. Учитывая, что SAP удовлетворяет требования всех функциональных подразделений компаний, работающих в различных отраслях, сложность и масштаб системы не вызывают

CreateProcess – порождает процесс и поток × C++ Builder программирование

Более современной, чем WinExec, является функция API Windows CreateProcess, которая и рекомендуется для 32-разрядных приложений.
Функция порождает новый дочерний процесс и его первый поток (нить). В рамках этого процесса выполняется указанный файл lpApplicationName с командной строкой lpCommandLine. Впрочем, параметр lpApplicationName может быть равен NULL, а имя выполняемого модуля в этом случае должно быть первым элементом командной строки, задаваемой параметром lpCommandLine. Сам выполняемый модуль может быть любого вида: 32-разрядным приложением Windows, приложением MS-DOS, OS/2 и т. п. Однако если из приложения Windows создается процесс MS-DOS, то параметр lpApplicationName должен быть равен NULL, а имя файла и его командная строка включаются в lpCommandLine. Так что, как правило, чтобы не ошибиться, проще всегда задавать IpApplicationName = NULL и помещать всю информацию в lpCommandLine.

Если имя файла не содержит расширения, то предполагается расширение .exe. Но если имя кончается символом точки или если файл задан вместе с путем, то расширение .exe к имени не добавляется. Если путь к файлу не задан, то файл ищется в тех же каталогах и в той же последовательности, как и в функции WinExec.

Множество параметров функции позволяют определить условия выполнения и управлять дочерним процессом. Параметры lpProcessAttributes, lpThreadAttributes, lpEnvironment, blnheritHandles определяют наследование дочерним процессом свойств родительского процесса. Если не вдаваться в подробности наследования, то можно первые три из этих параметров задавать равными NULL, а последний false. Параметр lpCurrentDirectory указывает на строку, определяющую текущий каталог и диск дочернего процесса. Это используется в приложениях оболочках, выполняющих различные приложения с различными рабочими каталогами. Если параметр равен NULL, текущий каталог совпадает с родительским.

Параметр dwCreationFlags определяет флаги, задающие характеристики создаваемого процесса. Эти флаги определяют тип процесса (например, CREATE_NEW_CONSOLE — создание нового консольного приложения), характер взаимоотношения с родительским процессом и класс приоритета нового процесса:

Значение Описание
HIGH_PRIORITY_CLASS Указывает на процесс как на критическую задачу, которая должна выполняться немедленно.
IDLE_PRIORITY_CLASS Все потоки процесса выполняются только во время простоя системы. Пример, хранители экрана. Все наследники такого процесса будут иметь тот же класс приоритета.
NORMAL_PRIORITY_CLASS Нормальный приоритет процесса.
REALTIME_PRIORITY_CLASS Высокий приоритет, превышающий приоритеты других процессов, включая приоритеты процессов операционной системы.

Параметр lpStartupInfo указывает на структуру типа TStartupInfo, определяющую основное окно дочернего процесса. Из всех полей этой структуры обязательным для заполнения является только cb — размер в байтах данной структуры. Остальные можно не заполнять, что обеспечит вид окна по умолчанию.

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

Значение Описание
hProcess Возвращает дескриптор созданного процесса. Используется во всех функциях, осуществляющих операции с объектом процесса.
hThread Возвращает дескриптор первого потока (нити) созданного процесса. Используется во всех функциях, осуществляющих операции с объектом потока.
dwProcessId Возвращает глобальный идентификатор процесса. Значение доступно с момента создания процесса и до момента его завершения.
dwThreadld Возвращает глобальный идентификатор потока. Значение доступно с момента создания потока и до момента его завершения.

Если функция CreateProcess успешно выполнена, она возвращает ненулевое значение, т.е. true. Если произошла ошибка, то возвращается 0, т.е. false. Тогда информацию об ошибке можно получить, вызвав функцию GetLastError.

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

Параметр hProcess — дескриптор дочернего процесса, тот самый дескриптор, который в родительском процессе хранится в поле hProcess структуры lpProcessInformation.
Параметр dwMilliseconds — время ожидания в миллисекундах.

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

Значение Описание
0 Порожденный процесс инициирован и ждет ввода со стороны пользователя.
WAITJTIMEOUT Заданный интервал ожидания истек.
OxFFFFFFFF Произошла ошибка. Информацию о ней можно получить с помощью функции GetLastError.

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

Параметр hHandle — дескриптор дочернего процесса, тот самый дескриптор, который в родительском процессе хранится в поле hProcess структуры lpProcessInformation.
Параметр dwMilliseconds — время ожидания в миллисекундах.

При нормальном завершении функция возвращает значение, указывающее на событие, которое вызвало возврат:

Значение Описание
WAIT_OBJECT_0 Дочерний процесс закончился.
WAIT_TIMEOUT Заданный интервал ожидания истек, но никаких сигналов от процесса не получено, т.е. он не закончился.

Порожденный процесс остается в памяти системы, пока не завершатся все его потоки (нити) и пока все его дескрипторы не закроются вызовом CloseHandle. Если эти дескрипторы не нужны, лучше всего закрыть их сразу после инициализации процесса. Чтобы досрочно прекратить выполнение дочернего процесса лучше всего использовать функцию ExitProcess.

Поделиться


Запуск оконной программы DOS из главного приложения / на embarcadero.public.delphi.language.delphi.general / NNTP Conversation

# Строки

Рэй Холл написал 14 октября 2010 г.:

У меня есть программа обновления прошивки для микроконтроллера, которая работает в окне DOS. Как я могу вызвать/запустить эту программу со списком параметров из моего основного приложения.
Рэй.
7

Эндрю Фионик ответил 14 октября 2010 г. :

14.10.2010 15:21, Рэй Холл написал:
(фрагмент)
Откройте MSDN и прочитайте о функции CreateProcess.
http://msdn.microsoft.com/en-us/library/ms682425%28VS.85%29.aspx

13

Рэй Холл ответил 14 октября 2010 г.:

(снип)

Андрей,
Я программирую на Delphi, а не на C.
Я сделал это несколько лет назад и не могу вспомнить, как это сделать.
Рэй.

20

Роберт Триест ответил 14 октября 2010 г.:

Привет,
{код}
HINSTANCE ShellExecute(
HWND hwnd, // дескриптор родительского окна
LPCTSTR lpOperation, // указатель на строку, определяющую операцию для выполнения
23
Эндрю Фионик ответил 14 октября 2010 г.:

14.10.2010 15:41, Рэй Холл написал:
(снип)
Неважно. Это работает аналогично в Delphi и в C.
(снип)
Просто погуглите слова: пример Delphi CreateProcess. Есть тонны
примеров использования этой функции API.
12

Кен Уайт ответил 14 октября 2010 г.:

(фрагмент)

Конечно, если вы все еще используете свое приложение в Windows 3.x или 95. В противном случае используйте CreateProcess, как указано выше. Это дает вам гораздо больший контроль над приложением, которое вы запускаете (например, куда поступает вывод и откуда поступает ввод, и в какой среде оно работает), и гораздо больше обратной связи о том, что происходит, когда оно завершено.



18

Кен Уайт ответил 14 октября 2010 г.:

(фрагмент)

Если вы собираетесь делать что-либо в Delphi, кроме простого добавления кнопки TButton в форму и написания кода Delphi в событии OnClick, вам придется использовать Windows API. Документация по API написана на C, поэтому вам нужно научиться переводить или хотя бы понимать основы.
(snip)
Есть такая классная штука, которая теперь называется «Google». Это действительно полезно для поиска вещей. Например, я только что выполнил поиск по «Delphi CreateProcess» (без кавычек) и получил более 33 000 результатов. Быстрый просмотр первых нескольких нашел этот полезный (№ 3 в списке результатов) под названием «CreateProcess in it’s Full Glory», который, казалось бы, помогает: http://blog. delphi-jedi.net/ 11.04.2008/создать процесс во всей красе/
Что действительно приятно в Google, так это то, что он выдал первую страницу этих 33K+ результатов всего за 0,57 секунды, а быстрое сканирование, которое я сделал на глаз, заняло еще около 10 секунд или около того.

42

Адем Меда ответил 14 октября 2010 г.:

Рэй Холл писал:
(snip)
Я не могу гарантировать, что ваша программа для DOS работает под Windows.
Но если вы хотите запустить его и прочитать его вывод обратно в вашу программу, я поместил компонент и демо в папку вложений; вы можете использовать это.

16

. ..

Крис Роллистон ответил 14 октября 2010 г.:

(отрезок)

Здесь все идет по касательной, но на самом деле? Я имею в виду, ты действительно
найти Delphi RTL и VCL настолько тонкими, что вам придется перейти к
Windows API часто? Очевидно, что если вы пишете пользовательский элемент управления
(скажем), то знакомство с базовым API является необходимостью,
но это плохо отразилось бы на продукте, если бы это было более

26

Эндрю Фионик ответил 15 октября 2010 г.:

15.10.2010 1:34, Крис Роллистон написал:
(снип)

Неважно, используется ли он часто или редко. ИМХО любой
Программист Windows (включая разработчиков Delphi) должен уметь использовать
Windows API регулярно. Однако чем меньше вы используете WinAPI напрямую, тем
лучше. Все эти буферы и указатели подвержены ошибкам.

19

Флоран Уше ответил 15 октября 2010 г.:

Привет,
Вы можете использовать JclSysUtils.Execute из библиотеки кода JEDI, это требует
функция обратного вызова, которая будет вызываться каждый раз, когда подпрограмма испускает
некоторый текст в канале STDOUT.
— Флоран
7

Рэй Холл ответил 15 октября 2010 г.:

(снип)

Адем,
Я попытался установить ваш компонент в Delphi 2010 и получил две ошибки. Не знаю, как их исправить.
TBuffer = Array[0..Pred(MaxInt)] Of Char;
[Ошибка DCC] CommandLiner.pas(147): E2100 Слишком большой тип данных: превышает 2 ГБ
Если GetUserProfileDirectory1(Handle1, PChar(@ProfilePath2[0]), @ProfileSize1), то начните

35

Адем Меда ответил 15 октября 2010 г.:

Рэй Холл писал:
(snip)
Если вы конвертируете эти ‘Char’ в ‘AnsiChar’ [также ‘PChar’ в ‘PAnsiChar’ы], это должно работать.


8

Гарри Пирс <Харри

10. 15.10 в 18:14 Флоран Уше написал:
(фрагмент)

Мне нравится компонент JVCL TJvCreateProcess, так как он обеспечивает стандартное событие
обработчики для stdout и завершения процесса и многое другое 🙂

16

Кен Уайт ответил 15.10.2010:

(snip)

Да, если вы делаете что-то большее, чем простые приложения типа CRUD (создание, чтение, обновление, удаление), а иногда даже в них. У меня есть приложение, которое должно отслеживать папку для новых файлов и информировать пользователя, когда они прибывают, чтобы их можно было обработать. Вместо использования TTimer и опроса новых файлов я использую ReadDirectoryChangesW из потока, чтобы ОС следила за мной и уведомляла об этом, вызывая событие.
(снип)

Как завернуть? Он уже объявлен и переведен для вас вместе с различными записями (структурами C), которые он использует. Любая «обертка» будет использовать так много перегруженных версий или так много параметров, что это будет совершенно запутанно (и, вероятно, бесполезно), а перенос образца из C, когда у вас есть записи и функции, уже переведенные для вас заранее, тривиально.
Но поскольку вы спросили (любезно предоставлено, конечно, доктором Питером Белуу):
{код}
{— WinExecAndWait32V2 ————————————————————- —}

177

Крис Роллистон ответил 15 октября 2010 г.:

(фрагмент)

Верно, но это то, что RTL/VCL должен оборачивать
ИМО, в идеальном мире. Более того, демо ShellControls уже
предоставляет оболочку FindFirstChangeNotification IIRC.
(отрезок)
Это должно быть адресовано лично мне?
(snip)

С каких пор функция API должна быть обернута просто другим

62
Крис Роллистон ответил 15 октября 2010 г.:

(отрывок)

Откровенно говоря, если они на самом деле не занимаются чем-то
как разработка пользовательского элемента управления, я думаю, что это требует слишком многого —
без сомнения, вы наизусть выучили простейшую программу для создания графического интерфейса,
но я не думаю, что многие другие разработчики VCL имеют.
Иными словами, средний разработчик Delphi не сможет точно определить

50

Рэй Холл ответил 15 октября 2010 г.:

(snip)

Устанавливается без проблем после внесения изменений. Теперь и моя программа, и ваша демонстрация дают это в памятке при запуске.
Мне кажется японский.
Рэй.
_________________________________________________________________________________________________________________________________________________________________________________________________
____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ ________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

110
Лайош Юхас ответил 15 октября 2010 г.:

Рэй Холл писал:
(фрагмент)
Согласно Google Translate, это китайский язык.


4

Квентин Коррелл ответил 15 октября 2010 г.:

Лайош,
| | Мне кажется японский.
|
| Согласно Google Translate, это китайский язык.
В японском языке используются китайские иероглифы. Так было на протяжении веков.
10

Лайош Юхас ответил 15. 10.2010:

Квентин Коррелл писал:
(snip)

Но не только (и Google нашел пару китайских слов в
результат). В любом случае нам нужно увидеть реальный код, который вызывает это
ужасное преобразование Ansi в Unicode. Не зная код для меня
по крайней мере, невозможно объяснить, как Delphi пришла к такому результату.

19

Крис Морган ответил 15 октября 2010 г.:

(снип)

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

28
Джон Тредер ответил 16 октября 2010 г.:

15.10.2010, 13:39, Рэй Холл написал:
(снип)
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
В каждом из этих маленьких квадратиков содержится по 4 символа, что-то вроде
Крошечный шрифт. Это вообще не азиатский язык. Когда я нахожу что-то
таким образом, я считаю, что это отсутствие подходящего шрифта,
36

. ..

Адем Меда ответил 16 октября 2010 г.:

Рэй Холл писал:
(отрезок)

Я не говорю по-японски/китайски
Этот код отлично работал под D7.
У вас должны быть проблемы с Unicode/UTF-8.
Извините, но я не могу помочь вам с этим, так как у меня нет (не намерен) иметь здесь XE.

19

Адем Меда ответил 16 октября 2010 г.:

Адем Меда писал:
(фрагмент)

Вы можете попробовать заменить ‘string’ на ‘AnsiString’s.


23

Крис Роллистон ответил 16 октября 2010 г. :

(отрезок)

Да, и это, конечно, одна из традиционных сильных сторон VCL, а не
только выставляет дескрипторы, часто позволяет инициализировать свои собственные
объекты высокого уровня с чем-то, созданным на уровне API. Например.,
TBrush в D2007, по крайней мере, по-прежнему предполагает использование только кистей DDB (бу!), но
принимает назначенный дескриптор кисти DIB, созданный с помощью непосредственного использования

45

Лорен Пехтель ответил 16 октября 2010 г.:

Пт, 15 октября 2010 г., 14:52:25 -07:00, Квентин Коррелл
написал:
(снип)

Некоторые символы. Когда мы были в Японии, моя жена понимала около 20%
того, что она читала на вывесках.

14

Руди Вельтус (TeamB) ответил 17 октября 2010 г.:

Джон Тредер писал:
(снип)

Я думаю, что Thunderbird справляется с этим. Это не то, что я вижу.
Я только что подписался на эту группу в Thunderbird, и там я вижу азиатских
символы с несколькими описанными вами коробками, с содержимым, подобным
0A0D, 0D29 и т. д. Это просто шестнадцатеричные значения символов, которые нужно

51

Джон Тредер ответил 17 октября 2010 г.:

17.10.2010, 5:49, Руди Вельтус (TeamB) написал:
(отрывок)

Замечательно!! Теперь все справа налево!
Джон

50
Руди Вельтус (TeamB) ответил 17.10.2010:

Джон Тредер писал:
(отрезок)
Я понимаю, что вы имеете в виду. Я тоже это вижу (в Thunderbird, а не в XanaNews).

Руди Вельтус (TeamB) http://www.teamb.com
«Это либеральная предвзятость. Пресса либерально предвзято относится к
11

Джон Тредер ответил 18.10.2010:

17.10.2010, 10:35, Руди Вельтус (TeamB) написал:
(snip)
Но потом это исправилось, когда я зашел на форум сегодня вечером.
Наверное глюк дрибреднухТ какой-то. 🙂
Джон
13
Кен Уайт ответил 18 октября 2010 г.:

(снип)

FindFirstChangeNotification и ReadDirectoryChangesW/A — два разных зверя; они не синонимы.
(отрывок)

IIRC, это вы говорили о том, что он не был завернут в течение 14 лет, так что это был ответ на то, что вы сказали; Я думаю, что это было адресовано лично вам в этом отношении. Хотя никак иначе.
(snip)

Зачем вам нужен компонент для переноса простого вызова API, такого как CreateProcess? Тем более, что типы данных и тому подобное уже переведены для вас? Напишите свою собственную функцию-оболочку с «разумными значениями по умолчанию» и объявлениями VCL и вызовите ее самостоятельно.
Стандартные диалоги — это совсем другие звери. В конечном итоге они представляют собой визуальное окно с полезными свойствами, которые можно установить в OI, такими как все различные флаги параметров, начальная папка, файловый фильтр и т. д. С другой стороны, CreateProcess или FindFirstChangeNotification не имеют конечного визуального представления даже для конечного пользователя приложения, если только вы его не предоставите. (Я предполагаю, что CreateProcess делает это, потому что вы запускаете другое приложение, которое может представить консоль или окно, но так как t
в полученном отображении нет никаких полезных свойств, которые можно было бы установить как свойства…)

198

Крис Роллистон ответил 18 октября 2010 г.:

(отрезок)

(1) Я никогда не говорил, что они были (2) в идеальном мире структура бы
предоставить интерфейс более высокого уровня, который защитит вас от заботы
о таких различиях, если вам на самом деле тоже не нужно.
(снип)

CreateProcess «простой»? Мы говорим о функции, которая не может
даже демонстрируют одинаковое поведение между его версиями A и W, верно? Любой

156
Кен Уайт ответил 20 октября 2010 г.:

(отрезок)

О, ради Пита, Крис. Вы не только не можете читать цитаты, которые я привожу от других людей, которым я отвечаю, и поэтому несправедливо критикуете меня за них, но теперь вы даже не можете читать *свои собственные* цитаты, на которые я отвечаю, даже когда *вы* цитировать их снова в ответ на меня?
Вы немного стремитесь найти здесь, с чем поспорить, когда не с чего было начать, не так ли?
(snip)

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

Если что-то не переведено и вы не можете написать этот перевод самостоятельно, вам придется ждать следующей версии Delphi, прежде чем вы сможете поддерживать новую функциональность. Опять же, моя исходная точка. Возможно, вам стоит вернуться и перечитать весь мой пост от начала до конца, а затем попытаться ответить еще раз?
(фрагмент)

Этот разговор был конкретно о Win32 API, что означает, что он НЕ касался платформ, отличных от Windows.

277

Крис Роллистон ответил 25 октября 2010 г.:

(снип)

Я дал вам конкретную причину, по которой, к сожалению, конкретный
рассматриваемая функция не имела базовой оболочки, а именно другой
поведение CreateProcessA и CreateProcessW (я имел в виду
параметр lpCommandLine, очевидно). Я впечатлен тем, что тебе никогда не приходилось
пересмотрите код из-за этого…

216

Проверка того, что конкретный процесс повышен в Delphi

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

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

Delphi createprocess запускается от имени администратора 5; если вам нужно сохранить совместимость 02 марта 2012 г. · Общая функция, использующая MFC, которая запускает команду с использованием командных файлов Executing DOS (или любых других программных файлов) и удаления файлов с помощью PASCAL. EXE для создания 64-битного дочернего процесса, передавая NULL для блока окружения

Когда вы создаете проект для целевой платформы Windows, RAD Studio Манифест приложения по умолчанию объявляет требуемый уровень прав как asInvoker . и выполните следующую процедуру: Delphi: использует System.Win.Registry, Winapi.Windows; Не удалось создать процесс: не удалось запустить приложение, поскольку его номер

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

Запрошенная операция требует повышения прав». Это не работает, потому что процесс выполняется от имени другого пользователя (или с помощью CreateProcess, и это не удается, когда приложению требуется повышение прав, больше глагол «runas», но это все еще не решает проблема «процесс отладки в другом пользовательском контексте». флажок установлен, конфигурация запускается с правами root отладить приложение с повышенными привилегиями, можно настроить

Время отладки Delphi, необходимое для запуска программы, разрешения UAC будут ошибкой «Невозможно создать процесс: для запрошенной операции требуется повышение прав». Это связано с тем, что delphi не запускалась с правами администратора, поэтому процесс создания delphi осуществляется с теми же правами, а не с правами администратора.

run-app-as-non-admin.bat После этого, чтобы запустить любое приложение без прав администратора, просто выберите «Запуск от имени пользователя без повышения привилегий UAC» в контекстном меню Проводника. Вы можете развернуть эту опцию на всех компьютерах в домене, импортировав параметры реестра с помощью GPO.

Попытка отладить программу Delphi, которая нормально работает в XP и Vista, но дает сбой в Windows 7. Я получаю сообщение об ошибке «Невозможно создать процесс» после определения места удаленной программы, |Адрес |Модуль |Единица |Класс |Процедура/ Метод|Линия| пользователь запрашивает отчет, для создания которого требуется некоторое время, и

Опросы — отличный способ получить большое количество качественных отзывов, которые мы можем также нацеливать на опросы для определенной аудитории, чтобы мы собирали их. Калькулятор заработной платы и узнайте больше об установленном процессе обеспечения качества с тщательным тестированием приложений

«проблема с выбором порта в переполнении стека arduino» Код ответа expo osascript -e сообщить приложению «Системные события» для подсчета процессов с именем «Статический метод avg High Temp(), который не получает никаких параметров. Проверьте, недействителен ли видеоинсерир последовательность байтов для кодирования «UTF8»: 0x00 delphi postgresql

Примечание: для получения обновленной версии кода проверьте репозиторий Github, чтобы получить командную строку от внешнего процесса, используя и буфер для хранения PROCESS_BASIC_INFORMATION, возвращенный в ProcessInformation, следующий код использует жестко закодированные смещения для чтения определенных местоположений

Аргументы процесса могут подсказать вам, где находятся конфиги, какие пароли использовать при самостоятельном запуске процесса. user 281741 76190 2 14:18 pts/14 Единственный способ, который я могу найти для получения аргументов командной строки в Windows, — это WMI. Нулевое доверие дома: удаленная работа без исключений.

Один из первых языков высокого уровня, он был составлен группой, спонсируемой Робертом Глассом, который определил конкретные способы, которыми COBOL лучше подходит для бизнеса. Теги: бюллетень, кобол, stackoverflow.

С другой стороны, у команды могут быть опции. Emacs предоставляет интерфейс командной строки в форме, а OS/2 сильно зависит от командных строк, передаваемых другим программам — консольным или графическим, которые затем обычно обрабатывают командная строка

Запустить программу Windows от имени пользователя другого процесса. RunFromProcess требует 2 параметра командной строки: вы можете сделать это следующим образом: (Параметр admin необходим для получения прав администратора в Windows Vista/7/8 при включенном UAC)

Параметр «Запуск от имени другого пользователя» отсутствует в Windows 10; Использование RunAs Чтобы запустить Notepad.exe под учетной записью администратора, выполните эту команду: часто используется для запуска программ, для запуска которых требуются повышенные разрешения.

Запуск исполняемого файла от имени пользователя, отличного от «Проводника», или путем установки параметра Например, вы можете запустить командную строку с повышенными привилегиями для Полезный совет: Самый простой и быстрый способ запустить CMD от имени администратора!

Re: Как определить, запущена ли моя программа с привилегиями root/повышенными? http://stackoverflow.com/questions/923350/delphi-prompt-for-uac-elevation-when- Предупреждение: эта функция будет выполняться во внешнем процессе.

Способ WMI WMI предоставляет очень надежный и простой способ доступа к параметрам командной строки из внешнего процесса. Все, что вам нужно сделать, это использовать класс wmi Win32_Process и просмотреть свойство CommandLine.

Запрошенная операция требует повышения прав. (выигрыш 7). Группы новостей Giganews. Тема: Не удалось создать процесс. ПК, и у меня также есть Delphi7 (это версия Delphi, используемая с издателем для внесения изменений в ПК».

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

Если я запускаю его от имени администратора, оно работает нормально, но никогда не требовалось раньше и нет, что говорит: «Невозможно создать процесс: запрошенная операция требует повышения прав.

Вы пробовали щелкнуть правой кнопкой мыши и запустить от имени другого пользователя и указать там свои учетные данные (администратора)? Пользователь. Единственный способ сделать это — поднять токен в приложении.

Исходное название: Разрешить запуск программы без администратора. (Windows 7) У меня возникли проблемы с поиском решения, как заставить программу работать без необходимости запуска от имени

Ярлыки можно отредактировать, чтобы они всегда запускались от имени администратора — Недвижимость | Ярлык | Дополнительно, затем отметьте «Запуск от имени администратора». Для повышения уровня из командной строки потребуется

Я установил программу, но если я попытаюсь открыть ее, она выдаст мне это сообщение. Невозможно выполнить файл . C:\d6_5143\d6\d6_5143.exe. Ошибка создания процесса: код 740

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

$USER содержит имя вошедшего в систему пользователя, который может иметь идентификатор пользователя 0 , но иметь другое имя. Единственная надежная программа для проверки того, является ли учетная запись

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

Как заставить приложение запускаться без прав администратора в Windows 10/8/7/Vista с правами администратора (также называемыми повышенными правами или «Запуск от имени администратора»).

Команда со всеми аргументами в виде строки. Способ №2 — Использование /proc. Вы можете содержать аргументы процесса $PID, такие как C-строки, одну за другой.

Привет! В моей программе есть некоторые функции, которые должны быть включены только в том случае, если программа вызывается от имени пользователя root (linux)/администратора (windows). Есть ли крест

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

. Для этого щелкните правой кнопкой мыши EXE-файл приложения и выберите «Свойства». В окне «Свойства» перейдите на вкладку «Совместимость» и включите «Запустить эту программу»

1.) Определение того, находится ли приложение в административном режиме! 3. Щелкните правой кнопкой мыши заголовок столбца и выберите Выбрать столбцы. с надписью «Повышенный». Выберите

В моей программе есть некоторые функции, которые должны быть включены только в том случае, если программа вызывается от имени пользователя root (linux)/администратора (windows). Есть ли

Внутри пакетного файла я хотел бы проверить, работаю ли я с правами администратора/повышенными правами. Имя пользователя не меняется, когда «Выполнить

» Например: в этой программе нам нужно сказать пользователю запустить другую программу. работает от имени администратора (с повышенными правами) в Windows 10. 1. Нажмите Alt+Ctrl+Del и выберите Диспетчер задач. 2. Теперь нажмите

Шаги, чтобы узнать, выполняется ли процесс от имени администратора (с повышенными правами) в Windows 10. 1. Нажмите Alt+Ctrl+Del и выберите Диспетчер задач 2. Теперь нажмите на

Затем я попытался запустить некоторые команды в этом новом приглашении, но оно не работает от имени пользователя с повышенными правами (даже несмотря на то, что у него есть права администратора).

RunAsInvoker — запускать приложение с привилегиями родительского процесса без запроса UAC. RunAsHighest — запустить приложение с кодом

. Если вы найдете свой процесс, передайте PID в OpenProcess, чтобы получить дескриптор процесса. Затем подождите. Код находится в Delphi, но его можно легко перевести на C++.

Как проверить, запущен ли процесс от имени администратора в Windows 10. Нажмите клавишу Windows + R, чтобы открыть окно «Выполнить», введите taskmgr и нажмите

Как проверить, запущен ли процесс от имени администратора в Windows 10. Нажмите клавишу Windows + R, чтобы открыть окно «Выполнить», введите taskmgr и нажмите

. Если вы попытаетесь запустить такие приложения или процессы без прав администратора, это может отобразить сообщение об ошибке Отказано в доступе, Нет разрешения или согласия

Если вы хотите проверить, работает ли приложение или программа в повышенном режиме с правами администратора в Windows 10, используйте эту задачу

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

Если вы хотите проверить, работает ли приложение или программа в повышенном режиме с правами администратора в Windows 10, используйте эту задачу

Есть ли возможность узнать, запущен ли другой процесс «от имени администратора» с повышенными правами ? Мой проект по умолчанию не запускается от имени администратора,

Для некоторых процессов требуются повышенные привилегии или запуск от имени администратора. Вот как можно увидеть статус работающего приложения в Windows 10.

Некоторые пользователи сообщили, что ошибка Createprocess Failed Code 740 не позволяет им использовать определенные приложения в Windows 10. Чтобы решить эту проблему,

Опции. [Рекомендуется]: PowerToys будет отображать подсказку при обнаружении процесса с повышенными правами. Откройте настройки PowerToys. Внутри General

Как запустить программу без прав администратора в Windows 10. RunWithRestrictedRights — отличный инструмент, который позволяет открывать программы без

Программы, вызывающие запросы UAC, могут вообще не запускаться, если вы запретите это. Аргументы RunWithRestrictedRights. Что, если бы мы могли заставить его?

The Wiert Corner – нерегулярный поток вещей. Jeroen W. Pluimers о .NET, C#, Delphi, базах данных и личных интересах. Дом. Wiert.me

Невозможно создать процесс. Запрошенная операция требует повышения прав. (win 7) Группа новостей: embarcadero.public.delphi.language.delphi.win32

Итак, мне нужно, чтобы моя программа знала, есть ли у нее права администратора / повышенные права на компьютере, я не могу найти любой способ для этого в Gowhere

Когда вы начинаете программировать в Delphi, вы можете получить такие ошибки, как «переполнение стека». Вот полезная информация.

Проверьте, запущен ли процесс от имени пользователя root, например, запущен ли он с помощью `sudo` — sindresorhus/is-root.

Новая интегрированная среда сценариев PowerShell с учетными данными «Домен\Суперпользователь» и разрешением администратора открыта. 🙂 Наслаждайтесь…

Настройки компилятора для Embarcadero Delphi XE6 — XE8 и 10 — 10.

3

Применимо к AQTime 8.81, последнее изменение 18 января 2022 г.

В этом разделе объясняется, как подготовить приложения, созданные с помощью Embarcadero Delphi XE6 — XE8 и 10 — 10.3 для AQTime. Чтобы узнать, как подготовить приложения, созданные в других версиях Delphi, см. раздел Параметры компилятора для собственных приложений.

Чтобы подготовить приложение Delphi для AQTime, прежде всего необходимо убедиться, что оно включает отладочную информацию. Выполните следующие действия:

  1. Откройте свой проект в Delphi.

  2. Активируйте конфигурацию, которую вы используете для создания отладочной версии вашего приложения. Для этого щелкните правой кнопкой мыши узел Project_Name  > Build Configurations >  Debug_Configuration в диспетчере проектов и выберите «Активировать» в контекстном меню.

    Примечание: Вы можете собрать свое приложение в любой конфигурации, а не только в отладочной. Мы выбираем конфигурацию отладки, чтобы убедиться, что изменения, которые будут внесены в настройки компилятора, не повлияют на конфигурацию выпуска, которая обычно используется для сборки финальной версии приложений.
  3. Выберите «Проект» > «Параметры» в главном меню, чтобы открыть диалоговое окно «Параметры проекта».

  4. В поле со списком Target выберите конфигурацию отладки. Если ваш проект включает в себя несколько платформ (например, 32-битную и 64-битную Windows), вы можете выбрать конфигурацию отладки либо для конкретной платформы, либо для всех платформ.

    Delphi загрузит параметры проекта для отладочных сборок.

  5. В дереве слева от диалогового окна выберите категорию Компилятор Delphi > Компиляция:

    • В группе Генерация кода установите для параметра Кадры стека значение True .

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

    • Чтобы включить информацию о локальных символах (имена и типы локальных переменных и констант в каждом модуле), установите для параметра «Локальные символы» значение 9.0784 True в группе Debugging.

    • Если вы собираетесь профилировать классы VCL, например, TDataset , установите для параметра Use debug .dcus значение True в группе Debugging. В противном случае AQTime сможет профилировать только те классы, которые определены в вашем приложении.

    Щелкните изображение, чтобы увеличить его.

  6. Перейдите в категорию Компилятор Delphi > Связывание и установите для параметра Отладочная информация значение Правда .

    Нажмите на изображение, чтобы увеличить его.

  7. (только для 32-разрядных приложений) Если вы хотите, чтобы информация об отладке хранилась в отдельных файлах TDS, а не в модулях приложения, установите для параметра Поместить информацию об отладке в отдельный файл TDS значение True .

    Нажмите на изображение, чтобы увеличить его.

  8. (необязательно). Из-за особенностей компилятора Delphi искаженные имена функций в генерируемой отладочной информации будут иметь формат, отличный от обычного формата. Возможно, AQTime не сможет правильно их распутать. Например, конструктор класса TObject будет выглядеть как @[email protected]@$bctr в панелях AQTime.

    Чтобы избежать этого, перейдите в категорию Компилятор Delphi > Вывод — C/C++ и установите для параметра Генерация выходного файла C/C++ значение Генерировать все файлы C++ Builder (включая библиотеки пакетов).

  9. Если вы не собираетесь использовать профилировщик распределения, пропустите этот шаг.

    Обратите внимание, что задача профилировщика распределения не в проверке производительности. Он предназначен для отслеживания выделения и освобождения памяти. Для этого профайлеру требуется доступ к базовым объектам VCL ( TObject и TInterfacedObject ). Самый простой способ предоставить доступ — отключить параметр «Связать с пакетами среды выполнения» в категории «Пакеты» > «Пакеты среды выполнения».

    Нажмите на изображение, чтобы увеличить его.

    Если вы хотите использовать параметр «Связать с пакетами среды выполнения» (например, для управления размером исполняемого файла), вы все равно можете использовать профилировщик распределения. Когда вы включаете свое приложение в проект AQTime, вы также должны будете включить файл \System32\RTL160.BPL.

    Чтобы добавить модуль в проект AQTime, нажмите «Добавить модуль» на панели инструментов «Настройка» или выберите его в контекстном меню «Настройка».

  10. После правильной настройки параметров компилятора и компоновщика перестройте приложение, и оно будет готово для профилирования. Если вы профилируете элемент управления ActiveX или COM-сервер, вам необходимо зарегистрировать его «отладочную» версию в системе (см.

Добавить комментарий

Ваш адрес email не будет опубликован.