2010-11-11 3 views
1

Мой установщик создает ключ реестра под HKLM \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Desktop \ NameSpace, который создает значок на рабочем столе во время установки, но после удаления этот значок остается до Я нажимаю F5. Так я гугл и нашел его от here, поэтому я добавил:VBScript для обновления рабочего стола в Wix или MSI

<CustomAction Id="CA_RefreshDesktopVB" Script="vbscript"> 
<![CDATA[ 
    Set WSHShell = CreateObject("WScript.Shell") 
    strDesktop = WSHShell.SpecialFolders("Desktop") 
    WSHShell.AppActivate strDesktop 
    WSHShell.SendKeys "{F5}" 
]]> 
</CustomAction> 

<InstallExecuteSequence> 
... 
<Custom Action="CA_RefreshDesktopVB" OnExit="success"/> 

Однако это не обновляет, когда удаление завершено. Я сделал что-то неправильно или это просто вне VB Script?

+0

Если вы регистрируете удаление, оно показывает, что пользовательское действие выполняется? – scott

+0

Да, так и было. Обратите внимание, что, поскольку значок не был создан под «Рабочим столом» пользователя, например, C: \ Users \ john \ Desktop или C: \ Users \ public \ Desktop, это не сработало, я думаю. – Petronius

+0

Ну, я отказался от использования VBScript. Вместо этого я просто создал CA Type 1, используя API-интерфейс оболочки, например. SHGetSpecialFolderLocation() и SHChangeNotify() b/c Я знаю, что это работает. – Petronius

ответ

0

AppActivate принимает в качестве параметра либо название окна, либо идентификатор процесса приложения (но не путь к папке!). В случае рабочего стола Windows заголовок окна, о котором сообщает Spy ++, является «Program Manager» (по крайней мере, на моей английской Vista). Измените свой сценарий на следующий и посмотрите, работает ли он:

Set WSHShell = CreateObject("WScript.Shell") 
WSHShell.AppActivate "Program Manager" 
WSHShell.SendKeys "{F5}" 
Смежные вопросы