Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Получение директории установки в VS setup project


Автор: Kostt 24.1.2006, 08:09
В VS Setup project функцию своей DLL сделал custom action, и в ней мне нужно узнать, какой путь для установки выбрал пользователь. Пробую следующее:

TCHAR* szValueBuf = NULL;
DWORD cchValueBuf = 1000;
Код

if (MsiGetTargetPath(hInstall,TEXT("Directory"), szValueBuf,&cchValueBuf)==ERROR_SUCCESS)

{
    MessageBox(NULL,"ok",szValueBuf,0);
} else if (MsiGetTargetPath(hInstall,TEXT("Directory"), szValueBuf,&cchValueBuf)==ERROR_INVALID_HANDLE)
{
    MessageBox(NULL,"error",szValueBuf,0);
}

return ERROR_SUCCESS;


появляется второй мессэйдж бокс, из чего следует, что hInstall неправильный хэндлер
Пробовал также
Код

UINT uiStat =  MsiGetProperty(hInstall, TEXT("TARGETDIR"), TEXT(""), &cchValueBuf);
if (ERROR_MORE_DATA == uiStat)
{
    ++cchValueBuf; // on output does not include terminating null, so add 1
    szValueBuf = new TCHAR[cchValueBuf];
    if (szValueBuf)
    {
        uiStat = MsiGetProperty(hInstall, TEXT("TARGETDIR"), szValueBuf, &cchValueBuf);
    }
}
if (ERROR_SUCCESS != uiStat)
{
   return ERROR_INSTALL_FAILURE;
}
 

delete [] szValueBuf;
smile
отрабатывает с ERROR_SUCCESS, но в буфере пути не появляется. Справка в MSDN туманна. Наверняка работал кто-нить с этими msiGet..., помогите, плиз

P.S. Извините, если тема не совпадает с тематикой форума, более подходящего форума не нашел

Автор: -ser- 24.1.2006, 09:41
лучше спросить на форуме у с++ -ников. наши уси пишуть на с#.

начни с простого, посмотри что у тебя в cchValueBuf (да и сам буфер szValueBuf) в строке
Код
uiStat = MsiGetProperty(hInstall, TEXT("TARGETDIR"), szValueBuf, &cchValueBuf);

там должно быть количество символов, записанных или необходимых для записи в буфер szValueBuf.

и посмотри сам буфер перед
Код

delete [] szValueBuf;

а то ты его удаляешь, и говоришь что он пустой.


Автор: arilou 24.1.2006, 13:48
Kostt
Попробуй INSTALLDIR передавать в параметрах к custom action. Я так делал.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)