-5

私は同僚と次のことが可能かどうかについて話し合っていました。

  1. Windows XPのUSBドライブからMFCアプリケーションをインストールします(このインストールは、ソフトウェアをインストールするのに十分な権限を持つユーザーによって手動で開始されます)。
  2. 再起動後、このアプリケーションはデフォルトのWindows XPシェル(explorer.exe)の代わりに起動するはずです。

誰かが私がこれを達成する方法を知っていますか?

4

2 に答える 2

7

Windows が起動する前に MFC アプリケーションを実行することはできません。定義上、MFC は、Windows 自体が起動するまで読み込まれない Windows DLL から実行されるためです。そもそも Windows が PE のロードを担当していることは言うまでもありません。そのため、コンパイル済みの EXE または DLL をカスタム ブートストラップなしでロードすることさえできません。

やりたいことを実行するには、いくつかのオプションがあります。起動時にアプリケーションをロードするようにウィンドウを設定する (簡単な) 方法があります。それがあなたの望むものなら、これは完全に可能です。

ただし、Windows の起動前および起動中にコードを実行する場合は、最初にブートストラップを (GRUB のようなもので) 上書きし、コードを実行する必要があります (ここでも、標準ライブラリにはアクセスできません。任意の種類の I/O を実行したい場合は、CPU によって利用可能になったバッファを直接操作してから、ブートストラッパーを起動してウィンドウを起動します。これを行う方法がわかりません。しかし、それは何が起こらなければならないかの一般的な概要です。

別の可能性であるDLLインジェクションについて言及しました。Windows の起動時に、どの DLL がどのような順序で読み込まれるのか、よくわかりません。それはあなたのための演習になります。考慮しなければならないことは、存在したいレベルが高いほど (つまり、ファイル/コンソール I/O を実行するために利用できるライブラリはどれか)、Windows の起動プロセスでコードを実行する必要があるということです。 .

あなたへの私の提案は、Windows の初期化中に開始されるサービスとして実行されるプログラムを単純に作成することです。これは簡単に実行でき、HAL 全体がロードされ、実際にタスクを実行する準備が整います。ウィンドウが HAL をロードする前に、ハードウェアを操作するためにデバイス固有のドライバーを作成する必要はありません。

于 2009-07-16T19:30:51.657 に答える
5

アプリケーションへのフル パスでレジストリ値を変更HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinitします。このキーは、ユーザーが Windows にログインした直後に起動するプログラムを指定します。このキーの既定のプログラムは C:\windows\system32\userinit.exe です。Userinit.exe は、ユーザー名のプロファイル、フォント、色などを復元するプログラムです。プログラムをコンマで区切ることで、このキーから起動するプログラムをさらに追加することができます

于 2009-07-17T09:58:08.383 に答える