Всплывающее уведомление Windows, COM не работает

#windows #uwp #notifications #com #toast

#Windows #uwp #уведомления #com #всплывающее уведомление

Вопрос:

Я работал над всплывающим уведомлением в соответствии с приведенными ниже требованиями.

  • Приложение должно обрабатывать все типы типов активации (передний план, фон, протокол).

Итак, я создал образец приложения UWP. он работает для переднего плана и фона. Но когда я создаю тост из powershell. Уведомление не активируется.

Я последовал за шагами в … https://docs.microsoft.com/en-us/windows/uwp/design/shell/tiles-and-notifications/send-local-toast-desktop?tabs=msix-sparse

Я также проверил и могу видеть GUID в реестре.

Репо к образцу приложения — https://docs.microsoft.com/en-us/windows/uwp/design/shell/tiles-and-notifications/send-local-toast Вам нужно добавить пакет nuget, чтобы он заработал — Microsoft.Инструментарий.Uwp.Уведомления

Сценарий Powershell —

 
[Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] | Out-Null
[Windows.UI.Notifications.ToastNotification, Windows.UI.Notifications, ContentType = WindowsRuntime] | Out-Null
[Windows.Data.Xml.Dom.XmlDocument, Windows.Data.Xml.Dom.XmlDocument, ContentType = WindowsRuntime] | Out-Null

$APP_ID = 'DF068783-F662-4A13-8BFC-F8BC1E53F4E6'

$template = @"
<toast activationType="protocol" launch="DF068783-F662-4A13-8BFC-F8BC1E53F4E6WinFormSampleAppActivator" duration="short">
    <visual>
        <binding template="ToastGeneric">
            
            <image placement="appLogoOverride" src="C:UsersdksilOneDriveDesktopGos.jpg" />
            
            
            <text><![CDATA[Test]]></text>
            
            
            <text><![CDATA[some test]]></text>
            
        </binding>
    </visual>
    
    <audio src="ms-winsoundevent:Notification.Default" loop="false" />
    
    
    <actions>
        
        <action activationType="protocol" content="I'm a button" arguments="DF068783-F662-4A13-8BFC-F8BC1E53F4E6" />
        
    </actions>
    
</toast>
"@

$xml = New-Object Windows.Data.Xml.Dom.XmlDocument
$xml.LoadXml($template)
$toast = New-Object Windows.UI.Notifications.ToastNotification $xml
[Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier($APP_ID).Show($toast)
    
 

введите описание изображения здесь

Помощь оценена по достоинству!!!

Ответ №1:

Потратив несколько часов на Google и попробовав чертовски много вещей. Я обнаружил, что проблема была в скрипте Power shell.

Приведенный ниже сценарий PS работает. Если вы можете сказать, почему это работает, но не указано выше, это будет здорово.

 $null = [Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime]
$null = [Windows.Data.Xml.Dom.XmlDocument, Windows.Data.Xml.Dom.XmlDocument, ContentType = WindowsRuntime]

$App = "af954980-b64d-4c13-858f-614bcbeb295e_304r6e67w7w2y!App"

[xml]$Toast = @"
<toast duration="short">
    <visual>
    <binding template="ToastGeneric">
        <image placement="appLogoOverride" src="C:UsersdksilOneDriveDesktopGos.jpg" />
        <text>Hello</text>
        <text>Deepak Dash</text>
    </binding>
    </visual>
    <audio src="ms-winsoundevent:Notification.Default" loop="false" />
    <actions>
        
        <action activationType="Protocol" content="I'm a button" arguments="C:UsersdksilOneDriveDesktopGo" />
        
    </actions>
</toast>
"@


# Load the notification into the required format
$ToastXml = New-Object -TypeName Windows.Data.Xml.Dom.XmlDocument
$ToastXml.LoadXml($Toast.OuterXml)
[Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier($App).Show($ToastXml)
 

Примечание — я также попытался установить $ App как «af954980-b64d-4c13-858f-614bcbeb295e_304r6e67w7w2y!Приложение». Это также не сработало для предыдущего скрипта PS.

Спасибо, Дипак Дэш.