C# WPF — проблема при открытии гиперссылки, когда .exe запускается пользователем системыC#

Место общения программистов C#
Ответить
Anonymous
 C# WPF — проблема при открытии гиперссылки, когда .exe запускается пользователем системы

Сообщение Anonymous »

У меня есть приложение WPF, включающее проект установщика, который при компиляции в режиме выпуска создает файл .msi. Этот файл .msi выполняет некоторые основные пользовательские действия после установки с помощью следующего класса.

Код: Выделить всё

[RunInstaller(true)]
public class InstallerClass : Installer
{
public override void Install(IDictionary stateSaver)
{
KillOtherNotifsProcess();
NotificationLog.Info($"CustomActions.Install...");
base.Install(stateSaver);
NotificationLog.Info($"CustomActions.Install OK");
}

public override void Commit(IDictionary stateSaver)
{
NotificationLog.Info($"CustomActions.Commit...");
base.Commit(stateSaver);
string targetDir = Context.Parameters["targetdir"].Trim();
StartApplication(targetDir);
}

private void KillOtherNotifsProcess()
{
try
{
string processName = "MyApplication";
IEnumerable
 otherNotifsProcesses = Process.GetProcessesByName(processName);
if (otherNotifsProcesses.Any())
{
foreach(Process curOtherNotifsProcess in otherNotifsProcesses)
{
NotificationLog.Info($"Found running instance of {processName}, killing process ID: {curOtherNotifsProcess.Id}");
curOtherNotifsProcess.Kill();
}
}
}
catch(Exception ex)
{
NotificationLog.Error("KillOtherNotifsProcess", ex);
}
}

private void StartApplication(string targetDir)
{
try
{
string NotifsFilePath = Path.Combine(targetDir, "MyApplication.exe");
NotificationLog.Info($"Starting application: {NotifsFilePath}");
//KillOtherNotifsProcess();
Process processToStart = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = $"\"{NotifsFilePath}\"",
UseShellExecute = false, // Must be false to hide the window
CreateNoWindow = true, // Ensures no window is created
WindowStyle = ProcessWindowStyle.Hidden // Hide the window if it's still created
}
};

NotificationLog.Info($"processToStart.Start {NotifsFilePath}");
processToStart.Start();
}
catch(Exception ex)
{
NotificationLog.Error("StartApplication", ex);
}
}
}

Как видно из функции Commit(), я запускаю StartApplication().
Дело в том, что когда приложение запускается после установка завершена, он запускает .exe от имени пользователя системы, что, похоже, вызывает некоторые проблемы с открытием гиперссылок.
В моем приложении, чтобы открыть гиперссылки после щелчка по элементу, я просто делаю это :

Код: Выделить всё

public static void OpenUrlInDefaultBrowser(string url)
{
string pattern = "[url=[\]]+)[\"'\\s>]+.*?[/url]";
Match match = Regex.Match(url, pattern);
if(match.Success)
url = match.Groups[1].Value;

try
{
ProcessStartInfo sInfo = new ProcessStartInfo(url)
{
UseShellExecute = true
};
Process.Start(sInfo);
}
catch(Exception ex)
{
MessageBox.Show($"Une erreur s'est produite : {ex.Message}", "Erreur", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
Но в результате появляется следующее всплывающее окно:
Изображение

Даже если я выберу одну браузере и нажмите «Всегда», всплывающее окно будет по-прежнему отображаться, если я нажму ссылку.
Такого поведения не будет, если я закрою приложение и запущу его вручную от имени текущего пользователя Windows: в этом случае ссылка открывается напрямую по умолчанию. браузер.
Я пытался запустить приложение после установки от имени текущего пользователя Windows с помощью решения, подобного этому: https://stackoverflow.com/a/4147868/7226035, но когда я нажимаю на ссылку, у меня появляется ошибка, сообщающая мне, что профиль браузера не может быть загружен. Поэтому я попытался дополнительно загрузить профиль пользователя Windows, но это не улучшило ситуацию.
Я искал на разных форумах и, кажется, ни у кого не было такой проблемы, так что, возможно, я что-то упустил...
Все идеи приветствуются!

Подробнее здесь: https://stackoverflow.com/questions/792 ... system-use
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»