windows環境でC++関数systemを使って、他のネットワークへマウントする方法について


表題について質問があります。

現在、windows10で通信アプリを作成しており、アプリを介して別のネットワークへマウントを試みております。

c++のsystem関数を使用すれば、マウントができると思いますが、そこが上手くできておらずどのようにすれば良いか分かっておりません。以下はアプリ内に組み込んだ簡単な例です。

system("mount 192.168.11.151:/home/Sample/root Q:");

上記のコマンドをコマンドプロンプト上で設定すれば正しくマウントできます。しかし、アプリ内でsystem関数を使用しても正しく動作しません。

お手数ですが、もし何かしらアドバイスあれば教えていただきたいです。




質問文にありませんが64bit OSと仮定します。

  * Client for NFSのmountコマンドは64bit版（`C:\Windows\System32\mount.exe`）しか提供されません。
  * コマンドプロンプトも通常の起動方法であれば64bit版（`C:\Windows\System32\cmd.exe`）が使われます。
  * `PATH`は一般的に`C:\Windows\system32`に通します。

この状況において、32bitアプリケーションでは[File System
Redirector](https://docs.microsoft.com/en-us/windows/win32/winprog64/file-
system-
redirector)により`C:\Windows\System32`へのアクセスは`C:\Windows\SysWOW64`にリダイレクトされます。このため、

>
[code]

>     system("mount 192.168.11.151:/home/Sample/root Q:");
>  
[/code]

この場合 `C:\Windows\SysWOW64\mount.exe` を探しに行き、実行ファイルが見つからない、となります。  
対策としてはWindows Vista以降であれば

[code]

    system("%windir%\Sysnative\mount.exe 192.168.11.151:/home/Sample/root Q:");
    
[/code]

で動作すると思います。  
32bit版コマンドプロンプト（`C:\Windows\SysWOW64\cmd.exe`）を使用すれば状況を再現できます。




質問文にありませんが64bit OSと仮定します。

  * Client for NFSのmountコマンドは64bit版（`C:\Windows\System32\mount.exe`）しか提供されません。
  * コマンドプロンプトも通常の起動方法であれば64bit版（`C:\Windows\System32\cmd.exe`）が使われます。
  * `PATH`は一般的に`C:\Windows\system32`に通します。

この状況において、32bitアプリケーションでは[File System
Redirector](https://docs.microsoft.com/en-us/windows/win32/winprog64/file-
system-
redirector)により`C:\Windows\System32`へのアクセスは`C:\Windows\SysWOW64`にリダイレクトされます。このため、

>
[code]

>     system("mount 192.168.11.151:/home/Sample/root Q:");
>  
[/code]

この場合 `C:\Windows\SysWOW64\mount.exe` を探しに行き、実行ファイルが見つからない、となります。  
対策としてはWindows Vista以降であれば

[code]

    system("%windir%\Sysnative\mount.exe 192.168.11.151:/home/Sample/root Q:");
    
[/code]

で動作すると思います。  
32bit版コマンドプロンプト（`C:\Windows\SysWOW64\cmd.exe`）を使用すれば状況を再現できます。

