プライマリ.exeを実行できないようにする必要があります(直接起動しようとすると、メッセージが表示されます:直接起動できません。セカンダリexeから実行されている場合(それだけ、crc検証が必要だと思います)、起動します。
最初の.exeを直接開始できないことを明確にしたいと思います2番目の.exeは最初のexeを開始できます(のみ)
最初のexeをDLLにします。次に、2番目のプログラムはそれを使用できますが、ユーザーはそれを直接実行できなくなります。
直接開始できないEXEを設定して、パラメーターを受け入れるように設定します。たとえば、開始するはずのデータからの一意のデータのSHA-256ハッシュなどです。そのパラメーターが存在しないか、予期されたものでない場合は、エラーを表示して終了します。
編集:
static class Program
{
static void Main(params string[] args) //<- first needed change
{
if(args.Length == 0 || args[0] != "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855")
{
Console.WriteLine("Cannot execute this program directly.")
return;
}
... //rest of main function
}
}
これを行う最も簡単な方法は、コマンドラインパラメーターを使用するか、それでも環境変数を設定して実行することです。そのため、「アプリを使用してほしいという事実を回避できますか?」から要件を追跡する方法はほとんどありません。それを実行します"。ただし、DLLが実際に進む方法になると思います。
プロセス名(Process.GetCurrentProcess().ProcessName
)で1番目または2番目のEXE名が付けられるかどうかはわかりませんが、1番目のEXEをDLLとして、2番目のEXEをEXEとして作成できます。