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

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

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

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

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

お手数ですが、もし何かしらアドバイスあれば教えていただきたいです。
CC BY-SA 4.0
2021-01-20T02:00:52.953
73422
2021-01-20T04:18:07.060
43586
question
c++ windows cmd
windows環境でC++関数systemを使って、他のネットワークへマウントする方法について
回答ではないのでコメント欄でやりたいところですが長くなるので回答欄で

Linux / Unix では、普通 `mount` を引数ナシで実行すると現在マウントされている一覧が表示されます。

```

    $ mount
    / on /dev/vg00/lvol3 ...
    /home on /dev/dsk/c0t5d0 ....
    $ 
    
```

同様に、まずはコマンドプロンプトから `mount` して一覧が出るようなら `system("mount");`
のみ実行して一覧が表示されるかどうかをまず確かめてみてください。 GUI プログラムであるなら **どこに**
出力されるか、どうやって出力を受け取るかは調査のこと。それが面倒なら別途コンソールアプリで試してみましょう。

あと `system()` の返却値と `errno` の値も確認しましょう。 [man 3
system](https://linuxjm.osdn.jp/html/LDP_man-pages/man3/system.3.html)

話の続きはそのあと（確認結果を元質問の編集の形で追記していただけると幸い）

# パスワードの入力があり得るので `mount` の `stdin` つか `tty` がコンソールでない場合は `mount`
自体が実動作をせずに即終了しているのではないかと妄想
CC BY-SA 4.0
2021-01-20T04:16:27.193
73426
2021-01-20T04:16:27.193
8589
73422
answer
質問文にありませんが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`にリダイレクトされます。このため、

>
```

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

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

```

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

で動作すると思います。  
32bit版コマンドプロンプト（`C:\Windows\SysWOW64\cmd.exe`）を使用すれば状況を再現できます。
CC BY-SA 4.0
2021-01-20T04:18:07.060
73427
2021-01-20T04:18:07.060
4236
73422
answer