あなたの「清潔さ」はせいぜい人工的な構造のようです。スタートアップ フォルダーにショートカットを作成するようにユーザーに指示している場合は、既に足跡を残していることになります (正直なところ、「myprog.exe」と「myprog.exe -m」の違いはほとんどありません)。 . その場合、どこから走っているかを自動的に検出しようとするよりも簡単な方法がいくつかあります。
プログラムにメニューオプションを提供するだけで(「インストール」)、必要なプログラムエントリ(スタート、すべてのプログラム、CintaNotes)を含む固定ディスクの場所(フラッシュドライブではなく)にソフトウェアがインストールされます。
As part of that process (or even after install), you can let them specify "Start with Windows" and then you create the start-up folder shortcut for the user with a command line option so your program can tell if it's running that way. There's no point in allowing "Start with Windows" unless the program's available (i.e., on the fixed disk, not the flash drive).
Your user need never have to worry about creating shortcuts at all, let alone ones with parameters. And this gives your program the control over how it's run - two modes, "installed" (and start minimized) or "running without installing first" (and start normal).
プログラムを起動するスタートアップ フォルダー項目がそのショートカットである可能性が高いため、実行可能ファイルのディレクトリを見つけるようなことはうまくいきません。そのため、そのパスはありません。
これは、間違った質問をする典型的なケースだと思います。あなたの特定の質問に答えて、私は言います: いいえ、いくつかのコマンド ライン パラメーターなしで、スタートアップ フォルダー エントリから起動されたことを伝える方法はありません。しかし、私は前に間違っていたので、妻に聞いてください:-)。他の誰かが方法を知っているかもしれません。
コメントには十分なスペースがないため、これを編集に追加します。
あなたが尋ねる:
プログラムがフラッシュドライブから実行されていることを検出したときに、「Windows の起動時に開始」オプションを無効にすることについてどう思いますか? 見分ける方法はあると思います。
インストールするまで自動実行を許可する意味がないので、これは良い考えです (フラッシュドライブがそこにない可能性があるため)。1 つの可能性:
1/ フラッシュから実行する場合、実行可能ファイルをダブルクリックして通常のウィンドウで実行するため、「myprog.exe」から開始します。これにより、「固定ディスクにインストールする」オプションが表示されますが、「Windows で開始する」オプションは表示されません。インストール プロセスの一環として、インストールされたコピーを "Start with Windows" に設定することは許可できますが、現在実行中のコピーは設定できません。
2/ Start/AllPrograms に項目を作成するため、インストールしたプログラムは "myprog.exe -i" として実行するように設定できます。これにより、「固定ディスクへのインストール」が無効になりますが、「Windows で開始」を切り替えることができます。(ユーザーによる) 明示的な実行を通常の状態で開始するか最小化して開始するかを選択できます ((3) を参照)。
3/ StartUp のショートカットは "myprog.exe -s" にすることができます (ここでも、作成したので、これを制御します)。これは (2) と同じですが、最小化された状態で開始されます ((2) が最小化された状態で開始された場合、(2) と (3) の間に区別はなく、異なるコマンド ライン オプションを使用する理由もありません)。
そうすれば、各オプションは、必要に応じて異なる動作を持つことができます。