Почему деинсталятор моей программы пропадает из меню "Пуск"?

Это перевод Why does my app’s uninstaller disappear from the Start menu? Автор: Реймонд Чен.

Клиент сообщил, что его программа установки создает ярлык в меню «Пуск»

Читать на сайте автора.

Почему попытка остановить мою службу возвращает ERROR_BROKEN_PIPE?

Это перевод What does it mean when my attempt to stop a Windows NT service fails with ERROR_BROKEN_PIPE? Автор: Реймонд Чен.

Один клиент сообщил, что иногда

Читать на сайте автора.

Почему компилятор генерирует операции с памятью для полной переменной, даже если задействован только один байт?

Это перевод Why does the compiler generate memory operations on the full variable even though only one byte is involved? Автор: Реймонд Чен.

Когда-то я помогал

Читать на сайте автора.

Поддержка классического оборудования эмуляцией

Это перевод Keeping classic hardware alive through emulation. Автор: Реймонд Чен.

На конференции и выставке Windows 2000, которая совпала с запуском операционной системы, я посетил стенд

Читать на сайте автора.

Зачем нужна красная зона? Я же могу просто использовать стек?

Это перевод Why do we even need to define a red zone? Can’t I just use my stack for anything? Автор: Реймонд Чен.

В Windows стек

Читать на сайте автора.

Ответ на задачку №25

Ответ на задачку №25.
Сначала можно подумать что утверждение — не верно. Действительно:

begin
TMyThread.Create.Start;
end.

Эта программа завершится немедленно, не дав потоку выполниться. Иными словами, программа завершается, когда в ней есть работающие потоки.

Однако, если вы читаете документацию (MSDN) или, например, Рихтера, то заметите, что там говорится о завершении процесса при выходе или завершении всех его потоков. Это явно противоречит ситуации выше.

В чём же дело?

Дело в том, что MSDN и Рихтер говорят о ситуации в «голой» системе, но мы рассматриваем случай, когда поверх системы накладывается ещё код поддержки языка — RTL. Система, действительно, не делает различий между главным и фоновыми потоками и закроет процесс только тогда, когда завершится каждый из потоков — вне зависимости от того, главный он или нет.

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

RTL не одинока в таком поведении. Большинство библиотек поддержки языков поступают так же. Почему они это делают? Потому что в современном мире программа понятия не имеет, какие потоки в ней выполняются.

Читать на сайте автора.

Старомодная матчасть по завершению процессов

Это перевод The old-fashioned theory on how processes exit. Автор: Реймонд Чен.

В былые времена жизнь была намного проще.

В прежние времена считалось, что процессы контролируют свои

Читать на сайте автора.

Как однажды ядро Windows пыталось противостоять гамма-лучам, разрушающим кэш процессора

Это перевод For a brief period, the kernel tried to deal with gamma rays corrupting the processor cache. Автор: Реймонд Чен.

Однажды вот такой код был

Читать на сайте автора.

Что случилось со шрифтом Arial Unicode MS?

Это перевод What happened to the Arial Unicode MS font? Автор: Реймонд Чен.

Клиент хотел узнать, что случилось со шрифтом Arial Unicode MS. Раньше он устанавливался

Читать на сайте автора.

Задачка №25

Верно ли это утверждение?

В Windows процесс завершается только тогда, когда завершается выполнение всех его потоков?

Читать на сайте автора.