Windows Installer XML (WiX) toolset

Неожиданно для себя наткнулся на замечательный инструмент для создания инсталляций - Windows Installer XML (WiX) toolset. Еще на прошлой неделе я был уверен, что поиски удобной среды для создания инсталляций под Windows Installer обернутся просмотром длинного списка коммерческих утилит и «наколенных» поделок. В качестве эталона для сравнения выступала Inno Setup – довольно удобная и простая в использовании программа. Кроме того Inno Setup бесплатна, что делало шансы на победу коммерческого инсталлятора мизерными.

Read On →

История команд в PowerShell

Хозяйке на заметку: глубина истории команд в PowerShell по умолчанию - 64 команды. С помощью $MaximumHistoryCount можно увеличить лимит до максимума в 32767 команд: $MaximumHistoryCount = 32767

.NET обертка для IShellLink

Наконец-то дописал .NET обертку для IShellLink (см. серию постов начиная с Shortcuts, shell and COM apartments.). Теперь можно создавать и редактировать ярлыки прямо из PowerShell. :-)

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

Read On →

No good deed goes unpunished, part 2

Raymond Chen, оказывается, такой душка. :-) На месте Exchange Server team я бы уже начал писать ругательное письмо.

Есть у меня мечта...

… причем, судя по всему, несбыточная. Хочу чтобы Visual C++, Platform SDK и WDK (бывший DDK) можно было использовать как отдельные кирпичики, из которых можно составить нужное окружение для сборки программ. Ведь по сути каждый их них это набор из компилятора, библиотек и подсистемы сборки (nmake, build или Visual Studio IDE). Выбрать бы из этой россыпи нужную версию компилятора и требуемый набор библиотек… Казалось бы все должно быть довольно просто, однако кругом рассыпано столько граблей, что просто руки опускаются. Read On →

Дело о невидимых файлах

Как вы думаете, какой сообщение выведет нижеследующая программа, в случае если её запустить на Windows Vista 64 с правами обычного пользователя, т.е. пользователя, у которого нет прав на запись в каталог “C:\Program Files”?

#include <memory.h>
#include <stdio.h>

int main(int argc, char* argv[])
{
    FILE* f = NULL;
    char cookie[] = { 'b', 'a', 'r', ' ' };
    char data[sizeof(cookie)] = { 'f', 'o', 'o', ' ' };

    f = fopen("C:\\Program Files\\foo.txt", "w");
    if (f)
    {
        fwrite(cookie, sizeof(cookie), 1, f);
        fclose(f);
    }

    f = fopen("C:\\Program Files\\foo.txt", "r");
    if (f)
    {
        fread(data, sizeof(data), 1, f);
        fclose(f);
    }

    if (0 == memcmp(data, cookie, sizeof(cookie)))
    {
        printf("Success!\n");
    }
    else
    {
        printf("Something went wrong!\n");
    }

    return 0;
}
Read On →

Зеркало на blogs.gotdotnet.ru

Со вчерашнего дня у блога появилось зеркало на blogs.gotdotnet.ru. Тyда будут копироваться заметки, посвяшённые разработке софта вообще и программированию под Windows в частности. Отдельное спасибо Александру Ложечкину за приглашение и помощь в создании зеркала.

COM marshalling: создание proxy/stub на коленке

Хочу поделиться рецептом победы над коварным IShellLinkDataList (см. предыдущие посты COM marshalling. и Shortcuts, shell and COM apartments.)

Итак, исходная задача: вызвать метод локального интерфейса (интерфейса, помеченного атрибутом [local]) удалённо.

Read On →

Работа над ошибками

Наткнулся сегодня на блог Александра Ложечкина и на его пост SAL - кое-что новое для С++ в частности. В двух словах SAL (Standard Annotation Language) - это способ дать компилятору немного больше информации о том, как та или иная функция использует переданные ей параметры: in/out аттрибуты, размеры буферов и т.п. Компилятор, используя эту информацию, может делать дополнительные проверки кода, находя, скажем, ошибки переполнение буфера. Более того, статические анализаторы кода, тот же PREfast, также могут использовать эту информацию, повышая тем самым эффективность и точность анализа. Read On →

COM marshalling, документация и все, все, все...

Все-таки, наверное, Европейский Суд не зря судит Microsoft за недостаточно хорошую документацию. Пытаясь разобраться как, все таки, написать proxy для интерфейса IShellLinkDataList (см. предыдущие посты: COM Marshalling. и Shortcuts, shell and COM apartments.), перечитал уйму документации, пока не нашел толкового описания того, что я хочу сделать на сайте Dr. Dobb’s. Если попытаться описать весь процесс “метаний”, то выглядело это так:

Read On →