aplicação Autostart ClickOnce em um modo silencioso
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.
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 .