Код: Выделить всё
[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);
}
}
}
Дело в том, что когда приложение запускается после установка завершена, он запускает .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
Мобильная версия