#c# #windows #desktop-application
Вопрос:
Итак, я создал приложение на C#, которое отправляет пользовательское всплывающее уведомление, сделанное на основе предоставленных аргументов. И это прекрасно работает в Windows 11, а в Windows 10 только в моей системе.
Для других пользователей уведомление появляется только иногда, а иногда оно вообще не появляется или появляется через долгое время в центре действий.
Вот репо для приложения: https://github.com/deathcrafter/Raintoaster
Я пробовал разные версии .NET Framework, в том числе 4.6.1(самая низкая) и 4.8. Кажется, все работает нормально для моего ПК с Windows 10 и пользователей, у которых на пк запущена сборка Windows 11 insider. Но не для других устройств с Windows 10.
Может ли кто-нибудь указать на то, что я делаю неправильно, или на то, что может быть причиной этого.
P.S.: Недавно я понизил рейтинг с Windows 11 до Windows 10 с чистой установкой, что может быть причиной того, что это работает для меня.
Заранее спасибо, death.crafter
Выписка из кода:
public static void Main(string[] args)
{
// Check if app was activated from toast
bool m = ToastNotificationManagerCompat.WasCurrentProcessToastActivated();
if (!m)
{
// Parse arguments and create toast
ParseArguments(args);
}
else
{
bool done = false;
Process rainmeter = new Process();
// Listen to notification activation
ToastNotificationManagerCompat.OnActivated = toastArgs =>
{
// Obtain the arguments from the notification
ToastArguments ar = ToastArguments.Parse(toastArgs.Argument);
// Obtain any user input (text boxes, menu selections) from the notification
ValueSet userInput = toastArgs.UserInput;
string[] programArgs = ar["arguments"].Split(new string[] { "|" }, 2, StringSplitOptions.RemoveEmptyEntries);
rainmeter.StartInfo.FileName = programArgs[0];
foreach (KeyValuePair<string, object> pair in userInput)
{
string arg = pair.Value.ToString();
programArgs[1] = programArgs[1].Replace("$" pair.Key "$", arg.Replace("r", "n"));
programArgs[1] = programArgs[1].Replace("$" pair.Key ":CRLF$", arg.Replace("r", "#CRLF#"));
}
rainmeter.StartInfo.Arguments = programArgs[1];
try
{
rainmeter.Start();
done = true;
}
catch (SystemException exec)
{
MessageBox.Show("Couldn't start program. Error: " exec);
done = true;
}
};
// Keep the app running until OnActivated event is raised and is completed
while (!done)
Thread.Sleep(100);
}
}