Mohith Kumar Ответов: 1

Необходимы ли права администратора для создания значка уведомления


Я использую WPF NotifyIcon https://www.codeproject.com/Articles/36468/WPF-NotifyIcon-2 Филипп, для одного из моих инструментов. Я не могу создать значок уведомления без прав администратора в системном трее. Инструмент будет работать на компьютерах конечных пользователей, которые не будут иметь никаких прав администратора, и инструмент не сможет создать значок уведомления.

Что я уже пробовал:

Это код в моем методе Main()
public static void Main(string[] args)
{
    DOTray dt = new DOTray();
    //Make the icon visible. Most imp
    MyDOIcon.Visibility = System.Windows.Visibility.Visible; 
}

Это код окна WPF
<Window 
        x:Class="DeviceOne.DOTray"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        Title="DeviceOne"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:DeviceOne"
        xmlns:gif="http://wpfanimatedgif.codeplex.com"
        xmlns:app="clr-namespace:DeviceOne"
        xmlns:tb="http://www.hardcodet.net/taskbar"
        WindowStyle="None"
        WindowStartupLocation="CenterScreen"
        BorderBrush="Gray"
        BorderThickness="1"
        Icon="/Resources/DOBlue.ico"
        ShowInTaskbar="False"
        Visibility="Hidden"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        mc:Ignorable="d"
        Height="300" Width="300" Name="TopWindow" ResizeMode="NoResize">
    
    <Grid>
        <tb:TaskbarIcon x:Name="MyDOIcon" IconSource="Resources/DOBlue.ico" ToolTipText="DeviceOne"  Visibility="Collapsed" PopupActivation="LeftOrDoubleClick">
            <tb:TaskbarIcon.TrayToolTip>
                <Border
                    Background="#FF4B4B4B"
                    BorderBrush="#ffed00"
                    BorderThickness="2"
                    CornerRadius="4"
                    Opacity="0.8"
                    Width="120"
                    Height="40">
                    <TextBlock FontWeight="Bold" Foreground="#ffed00"
                        Text="DeviceOne"
                        HorizontalAlignment="Center"
                        VerticalAlignment="Center" />
                </Border>
            </tb:TaskbarIcon.TrayToolTip>
            <tb:TaskbarIcon.ContextMenu>

                <ContextMenu FontWeight="Bold" Foreground="#FF4B4B4B" FontStyle="Normal" FontFamily="Microsoft YaHei" BorderThickness="1.2" BorderBrush="#FF747474" >
                    
                    <MenuItem Header="User Info" ToolTip="Load User Information" Click="UserInfo_Click">
                        <MenuItem.Icon>
                            <Image Source="Resources/user-info-new.png"></Image>
                        </MenuItem.Icon>
                    </MenuItem>
                    
                    <MenuItem Header="Restore Windows" Click="RestoreWindows_Click" >
                        <MenuItem.Icon>
                            <Image Source="Resources/Restore-Window-Icon.png"></Image>
                        </MenuItem.Icon>
                    </MenuItem>
                    
                    <MenuItem Header="About DeviceOne" Click="AboutDeviceOne_Click" >
                        <MenuItem.Icon>
                            <Image Source="Resources/DO.png"></Image>
                        </MenuItem.Icon>
                    </MenuItem>
                    
                    <MenuItem Header="Exit" Click="ExitDeviceOne_Click" >
                        <MenuItem.Icon>
                            <Image Source="Resources/exit-icon.png"></Image>
                        </MenuItem.Icon>
                    </MenuItem>
                </ContextMenu>
            </tb:TaskbarIcon.ContextMenu>
        </tb:TaskbarIcon>
        
    </Grid>
</Window>


Это не удается создать значок, когда он не запускается от имени администратора. Действительно ли права администратора необходимы для создания простой иконки? или что-то не так с кодом? Пожалуйста, помогите!

raddevus

Я знаю, что нет никаких требований в WinForms и использовании NotifyIcon, так что это, вероятно, то же самое в WPF. Вот пример, который я только что запустил и запустил в LINQPad (Linqpad.net) и он отобразил notifyicon в трее, хотя я не являюсь администратором на своей машине : https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.notifyicon.-ctor?view=netframework-4.8#System_Windows_Forms_NotifyIcon__ctor

Mohith Kumar

Это помогло. Спасибо!

raddevus

О, кроме того, я вижу, что это выглядит так, как будто WPF не реализует NotifyIcon в соответствии с этим: https://stackoverflow.com/questions/17674761/can-i-use-notifyicon-in-wpf
Но здесь, на CP, есть проект, который может помочь вам пройти через него: https://www.codeproject.com/Articles/36468/WPF-NotifyIcon

Richard Deeming

NB: То MyDOIcon переменная в вашем Main метод, по-видимому, не имеет никакого отношения к MyDOIcon управление в вашем окне.

Я подозреваю, что вы имели в виду:

dt.MyDOIcon.Visibility = System.Windows.Visibility.Visible;

Но если вы всегда устанавливаете это свойство, то было бы проще установить его непосредственно в разметке XAML.

Mohith Kumar

Да, я ставлю его точно так же.

1 Ответов

Рейтинг:
0

OriginalGriff

Не публикуйте это в разделе быстрые ответы - если вы получили код из статьи, то в нижней части этой статьи есть кнопка "Добавить комментарий или Вопрос", которая вызывает отправку электронного письма автору. Затем они предупреждаются, что вы хотите поговорить с ними.
Публикуя это здесь, вы полагаетесь на то, что они "заглядывают" и понимают, что это для них.