Pergunta

Eu tenho um aplicativo que usa ClickOnce de implantar, e eu consegui obter o aplicação que se inicia quando um usuário faz login.

As minhas questões são de que eu preciso a aplicação para iniciar oculto (Eu não quero que um usuário tem para minimizá-lo até que eles exigem - Quero que ela se sente na bandeja do sistema). Antes de usar ClickOnce Eu simplesmente verificou os argumentos para ver se "/ silent" foi passado. Não parece haver nenhuma maneira de fazer isso em um aplicativo ClickOnce (você pode verificar se uma cadeia de consulta URI é passado, mas porque este é executado a partir de um .appref-ms atalho parece haver nenhuma maneira de obter o argumento /silent)

Como posso obter o argumento /silent, ou como posso saber se o aplicativo foi iniciado como resultado do registro de usuário em (em vez do usuário iniciar o aplicativo a partir de um atalho)?

É importante que qualquer solução proposta não exige permissões de administrador, mas a linguagem utilizada não é tão importante quanto eu posso provavelmente porta-lo para .NET.

Foi útil?

Solução

Eu não acho que há uma maneira muito limpo para fazer isso, pois argumentos de comando não funcionam, e você não pode usar consulta argumentos de cadeia.

No entanto, tente implantar outro pequeno executável com a implantação ClickOnce. Seria responsável por estabelecer uma bandeira "startup" (em um arquivo de configuração, registro, qualquer que seja) e, em seguida, iniciar a sua aplicação real. Seu aplicativo poderia verificar o sinalizador para determinar se ele deve lançar em silêncio e, em seguida, redefinir o sinalizador. Então você teria apenas o começo pequeno executável com o Windows em vez de sua aplicação principal.

É claro que eu não tentar qualquer um isso.

Outras dicas

Você pode fazê-lo desta maneira:

Em seu Main-método:

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();
}

Depois, é só passar o argumento 'minimizado' com o ClickOnce do aplicativo para iniciá-lo minimizada.

Para iniciar a minha aplicação ClickOnce automaticamente, I fazer um atalho como este:

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

'MyMiniTools' é o nome do aplicativo, e 'LVH Ferramentas' é o nome do editor.

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();
    }

Um outro método para permitir autostart com ClickOnce é explicado em autostart aplicativo ClickOnce e desinstalação limpa ou o caminho para personalizar a instalação do ClickOnce .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top