ClickOnce アプリケーションをサイレント モードで自動起動する
質問
を使用するアプリケーションがあります クリックワンス デプロイし、ユーザーがログインしたときにアプリケーションを開始することができました。
私の問題は、アプリケーションを非表示で起動する必要があることです(ユーザーが必要になるまで最小化する必要はありません。システムトレイに置いておきたいのです)。ClickOnce を使用する前に、単に引数をチェックして、「/silent」が渡されているかどうかを確認しました。ClickOnce アプリケーションでこれを行う方法はないようです (URI クエリ文字列が渡されているかどうかを確認できますが、これは .appref-ms ショートカットから実行されるため、 /silent
口論)
どうすれば入手できますか /silent
引数、またはユーザーが (ユーザーがショートカットからアプリケーションを開始したのではなく) ログオンした結果としてアプリケーションが開始されたかどうかを確認するにはどうすればよいですか?
提案されたソリューションが何であれ、管理者権限を必要としないことが重要ですが、使用される言語はおそらく .NET に移植できるほど重要ではありません。
解決
私は、コマンドの引数は動作しませんので、これを行うには非常にきれいな方法はないと思う、とあなたは、クエリ文字列引数を使用することはできません。
しかし、あなたのClickOnce配置で別の小さな実行ファイルを展開してみてください。それは、あなたの実際のアプリケーションを起動して(何でも、設定ファイル、レジストリに)「スタートアップ」フラグを設定するための責任を負うことになります。アプリケーションは、それは静かに起動する必要があるかどうかを決定するためにフラグをチェックして、フラグをリセットします。次に、あなただけのWindowsと小さな実行開始ではなく、メインアプリケーションを持っているでしょう。
もちろん、私は、このいずれかを試してみませんでした。
他のヒント
次の方法で実行できます。
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 アプリケーションで引数「minimized」を渡すだけで、最小化された状態で起動できます。
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 インストールのカスタマイズ方法.