Автозапуск приложения ClickOnce в автоматическом режиме - PullRequest
1 голос
/ 17 июля 2009

У меня есть приложение, которое использует ClickOnce для развертывания, и мне удалось запустить приложение, когда пользователь входит в систему.

Мои проблемы в том, что мне нужно, чтобы приложение запускалось скрытым (я не хочу, чтобы пользователь сводил его к минимуму до тех пор, пока ему это не нужно - я хочу, чтобы оно находилось в системном трее). Перед использованием ClickOnce я просто проверил аргументы, чтобы убедиться, что передано «/ silent». В приложении ClickOnce, похоже, нет способа сделать это (вы можете проверить, передана ли строка запроса URI, но потому что это запустить из ярлыка .appref-ms, похоже, нет способа получить аргумент /silent)

Как я могу получить аргумент /silent, или как я могу узнать, запущено ли приложение в результате входа пользователя в систему (а не того, что пользователь запускает приложение с ярлыка)?

Важно, что любое предлагаемое решение не требует прав администратора, но используемый язык не так важен, как я, вероятно, могу перенести его на .NET.

Ответы [ 2 ]

0 голосов
/ 21 мая 2013

Вы можете сделать это так:

В вашем Main-методе:

if ((args.Length > 0 && args[0].ToLower() == "minimized") ||
    (AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData != null && AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData.Length > 0 &&
    AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData[0] == "minimized"))//ClickOnce arguments
{

    //My code to start minimized. My system tray is always visible
    main.WindowState = FormWindowState.Minimized;
    main.Hide();
    main.ShowInTaskbar = false;
}
else {

    //Code to start normally
    main.WindowState = FormWindowState.Normal;
    main.ShowInTaskbar = true;
    main.Show();
}

Затем вы можете просто передать аргумент «свернутый» в приложении ClickOnce, чтобы запустить его свернутым.

Для автоматического запуска приложения ClickOnce я создаю ярлык, подобный следующему:

CreateShortcut(Environment.GetFolderPath(Environment.SpecialFolder.Programs) + @"\LVH Tools\MyMiniTools.appref-ms", Environment.GetFolderPath(Environment.SpecialFolder.Startup) + "\\MyMiniTools", "minimized")

«MyMiniTools» - это имя приложения, а «LVH Tools» - имя издателя.

CreateShortcut:

    public void CreateShortcut(string destinationPath, string shortcutPath, string arguments = "")
    {
        IWshRuntimeLibrary.WshShell shell = new IWshRuntimeLibrary.WshShell();

        shortcutPath = Path.ChangeExtension(shortcutPath, "lnk");

        IWshRuntimeLibrary.IWshShortcut shortcut = (IWshRuntimeLibrary.IWshShortcut)shell.CreateShortcut(shortcutPath);

        shortcut.TargetPath = destinationPath;
        shortcut.IconLocation = destinationPath;
        shortcut.Arguments = arguments;

        shortcut.Description = Path.GetFileNameWithoutExtension(destinationPath);

        shortcut.Save();
    }

Другой способ включения автозапуска с помощью ClickOnce описан в Автозапуск приложения ClickOnce и чистое удаление или способ настройки установки ClickOnce .

0 голосов
/ 17 июля 2009

Я не думаю, что есть очень чистый способ сделать это, так как аргументы команды не работают, и вы не можете использовать аргументы строки запроса.

Однако попробуйте развернуть еще один небольшой исполняемый файл в своем развертывании ClickOnce. Он будет отвечать за установку флага запуска (в конфигурационном файле, реестре и т. Д.), А затем запускать ваше реальное приложение. Ваше приложение будет проверять флаг, чтобы определить, должно ли оно запускаться без вывода сообщений, а затем сбросить флаг. Тогда вам нужно будет запустить небольшой исполняемый файл с Windows, а не с основным приложением.

Конечно, я не пробовал ничего из этого.

...