Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

Вы можете сделать это следующим образом:

В вашем основном методе:

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» — имя издателя.

Создать ярлык:

    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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top