Сделайте контроль учётных записей дополнительным в Windows Installer на Vista

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

sp_executesql выполняется в другом сеансе (sp_executesql создает свой собственный сеанс), а временные таблицы зависят от конкретного сеанса.

Для вашего сценария вы можете использовать ## (глобальная временная таблица). Вы можете изменить свой запрос следующим образом.

SELECT @query = 
'
SELECT
* into ##temp
FROM 
(SELECT
Count(dbo.InventoryBiltyMaster.ID) AS BiltyCount,
--dbo.InventoryBiltyMaster.InventoryProductMasterID,
--dbo.InventoryBiltyMaster.VehicleMasterID,
dbo.InventoryProductMaster.Name,
dbo.VehicleMaster.VehicleNumber

FROM
dbo.InventoryBiltyMaster
INNER JOIN dbo.InventoryPartyProductPriceMaster ON dbo.InventoryBiltyMaster.InventoryPartyProductPriceMasterID = dbo.InventoryPartyProductPriceMaster.ID
INNER JOIN dbo.InventoryProductMaster ON dbo.InventoryPartyProductPriceMaster.InventoryProductMasterID = dbo.InventoryProductMaster.ID
INNER JOIN dbo.VehicleMaster ON dbo.InventoryBiltyMaster.VehicleMasterID = dbo.VehicleMaster.ID
WHERE
dbo.InventoryBiltyMaster.PartyMasterID = ' + CAST(@partymasterid as nvarchar(50)) + '
GROUP BY
dbo.InventoryBiltyMaster.InventoryProductMasterID,
dbo.InventoryProductMaster.Name,
dbo.InventoryBiltyMaster.VehicleMasterID,
dbo.VehicleMaster.VehicleNumber
)
AS S
PIVOT
(
    MAX(BiltyCount)
    FOR [Name] IN (' + LEFT(@cols, LEN(@cols)-1) + ')
)AS pvt';

EXEC SP_EXECUTESQL @query
--now you can use ##temp

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

16
задан Martin v. Löwis 31 October 2008 в 08:26
поделиться

3 ответа

К сожалению, Windows Installer не позволяет создавать единственный пакет, который может установить на машину и в расчете на пользователя, но только запросить контроль учётных записей на случае на машину. Проблема - то, что бит, который может подавить подсказку контроля учётных записей, хранится в потоке SummaryInformation и не модифицируемый, в то время как пакет выполняется.

6
ответ дан 30 November 2019 в 23:14
поделиться

Я отключил UAC, установив бит 3 в PID_WORDCOUNT в моем пакете MSI. Я могу установить его для «ALLUSERS» и «PER-USER», а также записать для HKLM в обоих режимах на машинах VISTA. Обязательно ли получать всплывающее окно UAC для привилегированного пользователя во время установки?

1
ответ дан 30 November 2019 в 23:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: