質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

IIS

IIS(Internet Information Services)はマイクロソフト社によって開発されたwebサーバーです。Windows上で動作します。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

1回答

8052閲覧

ASP.NET C# WORKGROUP上の共有フォルダからファイルをコピーしたい(IIS10)

monagano

総合スコア246

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

IIS

IIS(Internet Information Services)はマイクロソフト社によって開発されたwebサーバーです。Windows上で動作します。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2017/05/01 09:12

編集2017/05/01 15:03

###前提・実現したいこと
IIS10上で動作するWebアプリケーション(ASP.NET C#)において、
WebサーバからLAN上(同WORKGROUP上)の共有フォルダに存在するファイルを
Webサーバのローカルフォルダにコピーする処理を実行したいと考えております。
※ドメインの運用はしておりません。

  • アプリケーションプールにはDefaultAppPool(.Net CLR v4.0 統合)を使用しております。
  • Webサーバの認証はWindows認証ではなく、identityのフォーム認証(個人 ユーザー アカウント)を使用しております。
  • LAN上の共有フォルダについては、Everyoneにフルコントロール権限を付与しており、コピー先のWebサーバのローカルフォルダには、IIS AppPool\DefaultAppPool にフルコントロール権限を付与しております。

###プロジェクト構成

  • Visual Studio Professional 2017
  • ASP.NET MVC5.2.3
  • .NET Framework 4.6.1
  • EntityFramework 6.1.3
  • ASP.NET Identity 2.2.1
  • IIS10

###発生している問題・エラーメッセージ
Webページからのリクエストに応じて、以下のようなコードでrobocopyコマンドを使用し、
指定の共有フォルダからWebサーバのローカルフォルダにコピーをしたいと考えましたが、
実行結果はExit Code 16(did not copy any files. )となってしまいました。

同様のコマンドをログインユーザで実行したところ、問題なくコピーが行えたため、
恐らくIIS AppPool\DefaultAppPoolに権限がないため、コピーを実行できていないものと考えております。

C#

1public static int ProcessCommand(string SolutionDirectory, string TargetDirectory) 2{ 3 var startInfo = new ProcessStartInfo(); 4 startInfo.WorkingDirectory = @"C:\hoge"; 5 startInfo.UseShellExecute = false; 6 startInfo.FileName = "robocopy"; 7 //startInfo.Verb = "RunAs"; 8 9 startInfo.Arguments = $"\"{SolutionDirectory}\" \"{TargetDirectory}\" /MIR"; 10 Process process = Process.Start(startInfo); 11 process.WaitForExit(); 12 return process.ExitCode; 13}

###アドバイスいただきたいこと
セキュリティに関する懸念はともかく、どんな形でもよいので、実現方法のヒントをいただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

うまくいくかどうかわかりませんが、偽装を試してみてはいかがですか?

投稿2017/05/01 09:24

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

monagano

2017/05/01 09:43

ご回答いただきありがとうございます。 偽装による実現を検討してみようと思います。 今回のように一部処理において権限を要するようなケースにおいて、 どのような実装方法が推奨されるのでしょうか。 msdnのASP.NET の偽装関連エントリを参照しましたが、理解力が足りず、頭の中で上手く内容が整理できておりません。 参考になる文献等ありましたら、ご教示いただけると幸いです。
退会済みユーザー

退会済みユーザー

2017/05/01 10:43

以下の記事にある "次の例に示すように、固有の名前のサポートを追加し、アプリケーションを構成可能な ID として実行することもできます" という手段が考えられます。 ASP.NET の偽装 https://msdn.microsoft.com/ja-jp/library/xh507fc5(v=vs.100).aspx Web サーバーとファイルサーバーの両方にアカウントを設定すればできるという話(噂レベルかも)を聞いたことがありますが、自分自身は workgroup でそのようなことを試したことはないので、保証の限りではないです。 あと、robocopy コマンドも自分は使ったことがなく、もし、その実行にユーザープロファイルが必要とか、ユーザー対話モードで実行する必要のあるプロセスであるとすると、偽装ではダメだと思います。
monagano

2017/05/19 04:07

ご回答ありがとうございます。 ユーザの偽装で実装を試みましたが、各サーバでアカウント設定を行う必要があったため、 最終的には、ローカルアカウントを使用した別プロセスのファイルコピー用のサービスを立ち上げておき、名前付きパイプでプロセス間通信をすることで目的を達成いたしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問