2009-07-16 4 views
1

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

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

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

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

ответ

0

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

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

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

+0

Это то, что я планирую делать - не смог найти лучшего способа сделать это! (Если вы делаете это, не забудьте обновить ярлык для вспомогательного приложения после каждого обновления). Спасибо, что подтвердили, что это должно произойти! –

0

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

В вашем 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 Сервис» является именем Publisher.

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 application autostart and clean uninstall or the way to customize ClickOnce installation.

+0

Как этот дескриптор обновляется, когда путь будет изменен? –

+0

Зачем нужно изменение пути? Путь, который я использую, - это расположение файла .appref-ms в стартовом меню. Пользователи моего приложения используют Windows 7 или Windows 8, и автозапуск продолжает работать после обновлений. У меня нет причин думать, что это не будет работать со старыми версиями Windows. – Coder14

Смежные вопросы