Processクラスが正常に動作しない

このQ&Aのポイント
  • VisualStudio .NET2003でProcessクラスを利用してPDFファイルを印刷するプログラムを作成していますが、正常に動作しません。
  • タスクマネージャーを確認したところ、Adobe Readerのプロセスは実行されていますが、印刷処理は実行されていません。
  • 提供されたコードは正しく設定されていますが、何か問題が生じているようです。
回答を見る
  • ベストアンサー

Processクラスが正常に動作しません。

VisualStudio .NET2003でProcessクラスを利用してPDFファイルを自動的に印刷するプログラムを作っていますが、正常に動作しなくて困っています。タスクマネージャーを確認してみると、Adobe Readerのプロセスが実行されていることが分かったのですが、印刷処理は実行されないままになっています。 下記にコードを記載しますのでアドバイスよろしくお願いします。 Process myProcess = new Process(); myProcess.StartInfo.FileName = ”MyFile.pdf"; myProcess.StartInfo.Verb = "Print"; myProcess.StartInfo.CreateNoWindow = true; myProcess.Start();

質問者が選んだベストアンサー

  • ベストアンサー
  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.1

プリンタを利用するための権限等は確認していますか?

shojik
質問者

お礼

回答ありがとうございます。 プリンタの権限を「Everyone」「ASPNET」ユーザーとも フルコントロールにしていますがうまく動いていないです。 PDFではなくDoc(WORDファイル)に変更しても同じでした。

その他の回答 (1)

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.2
shojik
質問者

お礼

いろいろ調べた結果、サーバーで他のプロセスを動かす場合、ASPNETなどのユーザーになってしまい、 権限等の問題があるため印刷できないようです。 サーバーに印刷を行う常駐プログラムを作成し、これがProcessクラスを呼ぶことで解決できました。 ありがとうございました。

shojik
質問者

補足

関連ページを教えていただきありがとうございました。 早速、リンク先を確認して色々と試してみたのですが正常に印刷はできませんでした。 私の環境ではプリンタが2台、ネットワークプリンタとしてつながっているのですが、 試している途中でたまに"デフォルトプリンタではない方"から印刷される場合がありました。 Process.Startメソッド実行後の詳細をデバッグする方法があればより詳しく終えるのですが 何か方法があれば教えて下さい。

関連するQ&A

  • PDFファイルを印刷し終了するには

    VB 2005で開発しています PDFファイルを印刷し印刷が終わったらAcrobatを終了させたいのですが、 方法が分かりません。 Dim proc As New Process proc.StartInfo.FileName = "z:\book1.pdf" proc.StartInfo.Verb = "Print" proc.StartInfo.CreateNoWindow = True proc.Start() この後、印刷が完了した後Acrobatのみ残ってしまいます。 印刷が終了した時点でAcrobatを終わらせる方法はないでしょうか。 ご教示お願いします。

  • C#でIISでPDFを印刷する方法

    VisualStudioでC#/ASP.netでPDFファイルをサイレント印刷するプログラムを実装しています。 「VisualStudio開発サーバーを使用する」の状態だと、 問題なく動作するのですが 「IIS Webサーバーの仕様」にすると 下記コードが全く反応しなくなります。 プリンタのプロパティ(セキュリティ)には 「Network Service」の「実行権限」を追加しています。 コードは、以下です。原因に何か心当たりのある方は、ご教授下さい。 Process printProcess = new Process(); string filePath = null; try { filePath = "C:\\PDFPRINT\\Output\\out.pdf"; printProcess.StartInfo.FileName = "C:\\Program Files (x86)\\Adobe\\Reader 10.0\\Reader\\AcroRd32.exe"; printProcess.StartInfo.Verb = "open"; printProcess.StartInfo.Arguments = " /h /t " + filePath + " EPSON PX-404A"; printProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; printProcess.Start(); printProcess.WaitForExit(1500); } catch { throw; } finally { if (!printProcess.HasExited) { printProcess.Kill(); printProcess.Dispose(); } }

  • c# 他プロセス起動 リダイレクト(入力) バイナリファイルの場合

    現在、c#で他プロセスを起動させるプログラムを組んでいるのですが、リダイレクトでつまづいています。 (コンパイルが出来ない->どう記述すれば良いのか分からない。) ファイルストリームのReadはデータをByteの配列に格納しますが、リダイレクト入力のwriteはcharの配列を引数としているみたいで、どう記述すれば良いのか分かりません。 記述方法または参考URLを教えていただけないでしょうか? --source--  System.IO.Stream retstream = new FileStream(wkPath, FileMode.Open, FileAccess.Read, FileShare.Read);  System.Diagnostics.Process myProcess = new System.Diagnostics.Process();  myProcess.StartInfo.FileName = "C:\\Program Files\\proc\\process.exe";  myProcess.StartInfo.UseShellExecute = false;  myProcess.StartInfo.RedirectStandardInput = true;  myProcess.StartInfo.RedirectStandardOutput = true;  if (strmInput.Length > 0) {   int num = 0;   byte[] bufWk = new byte[65536];   while (true) {    num = strmInput.Read(bufWk, 0, bufWk.Length);    if (num == 0) {     break;    }    myProcess.StandardInput.Write(bufWk, 0, num); //←コンパイルエラー   }  } --エラー内容-- System.IO.TextWriter.Write(char[], int, int)' に最も適しているオーバーロード メソッドには無効な引数がいくつか含まれています。 引数 '1': 'byte[]' から 'char[]' に変換できません。

  • コマンドプロンプトを表示せずにプロセスの起動

    VB.NETでソースファイルをJ2sk142(javac.exe)に渡してコンパイルの結果をコマンドプロンプトではなくVBのTextBoxに表示するプログラムを作成しています。 でも、プロセスを起動すると一瞬だけプロンプトが表示されます。 これを表示させない方法はありますでしょうか? With Process1 .StartInfo.FileName=JAVACPATH .StartInfo.Arguments=TextBox.Text .StartInfo.WorkingDirectory=ProPath .StartInfo.UseShellExecute = False .StartInfo.ErrorDialog = True .EnableRaisingEvents = True .StartInfo.RedirectStandardOutput = True .StartInfo.RedirectStandardError = True .StartInfo.WindowStyle = ProcessWindowStyle.Hidden End With Try Process1.Start() OutPutTextBox.Text &= Process1.StandardOutput.ReadToEnd OutPutTextBox.Text &= Process1.StandardError.ReadToEnd Process1.WaitForExit() Catch ex As Exception

  • C#でEXEを閉じるとエラー

    myProcess.StartInfo.FileName = @"C:\Program Files\Sample\Sample(1)\Sample.exe"; myProcess1.Start(); myProcess.StartInfo.FileName = @"C:\Program Files\Sample\Sample(2)\Sample.exe"; myProcess2.Start(); 上記として、開いたウィンドウを閉じるボタンで終了した際にエラーとなります。 プロセスを一つにすると、エラーが出ないため、同一名のプロセスが原因しているのかと思うのですが、処理の仕方がわかりません。 myProcess1.Exited += new EventHandler(myProcess_Exited); myProcess2.Exited += new EventHandler(myProcess_Exited); private void myProcess_Exited(object sender, System.EventArgs e) { Process exitProcess = (Process)sender; exitProcess.Dispose(); } としてもエラーになりました。 今後、Sample.exeは6つ開きたいのですが、2つでつまづいています。 対処法をご存知の方がおられましたら、アドバイスよろしくお願いいたします。

  • VisualBasic2005 外部アプリを最小化で起動する

    VisualBasic2005にてプログラムをしているのですが、 指定されたアクションをトリガにして、外部アプリを最小化で起動したいのですが、最小化されずに起動してしまいます。 外部アプリは、WEBブラウザ(safari)です。 以下に、処理部分を記載します。 Dim p As System.Diagnostics.Process = New System.Diagnostics.Process p.StartInfo.FileName = 'safariのパス' p.StartInfo.Arguments = '指定したURL' p.StartInfo.UseShellExecute = False p.StartInfo.RedirectStandardOutput = True p.StartInfo.WindowStyle = ProcessWindowStyle.Minimized p.StartInfo.CreateNoWindow = True p.Start() 上記で実行すると、指定したURLでSafariが起動するのですが、 最小化で起動しません。 通常のウィンドウサイズで起動します。 どなたか、アドバイスをお願いします。

  • C# コマンドプロンプト画面で表示された文字の取得

    Windowsフォームアプリケーションからコマンドプロンプトを起動して、コマンドを実行した際に出る出力をフォームアプリケーション側から受け取ろうとしています。 テスト内容では成功するのですが、受け取りたい対象の内容は取得できずに困っています。 例えばコマンドプロンプト上で hoge と入力し実行すると 「'hoge' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 と表示されます。 しかし、前述カッコ内の表示をアプリケーション側から受け取ることが出来ませんでした。 どのようにすれば受け取ることができるでしょうか? 単純な path などを実行した場合は受け取れました。 以下が試した内容です。 Process ps = new Process(); ps.StartInfo.FileName = Environment.GetEnvironmentVariable("ComSpec"); ps.StartInfo.Arguments = @"/C hoge"; ps.StartInfo.UseShellExecute = false; ps.StartInfo.RedirectStandardOutput = true; ps.StartInfo.CreateNoWindow = true; ps.Start(); string output = ps.StandardOutput.ReadToEnd(); ps.WaitForExit(); ps.Dispose(); MessageBox.Show(output);//空の内容しか表示されない //テストで hoge を path にした際はシステム環境変数が表示された ・環境 Windows 7 Professional 64bit VC# 2010 Express よろしくお願いいたします。

  • PDFの印刷で。。。

    C#よりAcrobatReaderにPDFをエクスポートして印刷を行う処理 を作成中です。 そこで質問ですが,エクスポートされたPDFを印刷する際に、 PDFを開かずに印刷することは可能でしょうか? 現在、ネットよりいろいろ調べて組み込んだロジックでは印刷をする ことはできましたが、どうしてもPDFが開かれてしまいます。 ソースを以下に載せましたのでご教授願います。 System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(); //パスを取得する psi.FileName = @"C:\Program Files\Adobe\Acrobat 7.0\Reader\AcroRd32.exe"; //出力を読み取れるようにする psi.RedirectStandardInput = false; psi.RedirectStandardOutput = true; psi.UseShellExecute = false; //ウィンドウを表示しないようにする psi.CreateNoWindow = true; //コマンドラインを指定 psi.Arguments = @"/t " + Application.StartupPath + "\\PDFExpt.PDF"; System.Diagnostics.Process p = System.Diagnostics.Process.Start(psi); //出力を読み取る string results = p.StandardOutput.ReadToEnd(); p.WaitForExit(); p.Close(); p.Dispose(); 申し訳ありませんがよろしくお願い致します。

  • vba pdfを手前に開きたい  Shell

    Sub Sample() Dim myFile As String myFile = "C: \test.pdf" Shell """C:\Program Files (x86)\Adobe\Reader 10.0\Reader\AcroRd32.exe"" " & myFile End Sub vbaからこれでPDFファイルを開くことができるのですが アクセスの後ろで開いてしまいます。 このコードを実行したら、開いたPDFファイルを画面の手前に表示したいので 何を付け足せばいいのでしょうか?

  • VBでコンソールアプリの出力を取得したいのですが

    ネット上で入手したコマンドプロンプト上で使うアプリをGUIで操作できるようにしたく出力を取得したいのですが出来ません。 ネットで出力の取得方法を調べて下記のようにしているのですがどうやっても取得できません・・・ (ipconfig や dir 等は問題なく取得できたのですが・・・) VBは2008です Dim p As New Process() p.StartInfo.FileName = "cmd.exe" ' 実行するファイル p.StartInfo.Arguments = "aaa.exe" ' 目的のアプリ p.StartInfo.CreateNoWindow = True ' コンソールを開かない p.StartInfo.UseShellExecute = False ' シェル機能を使用しない p.StartInfo.RedirectStandardOutput = True ' 標準出力をリダイレクト p.Start() ' アプリの実行開始 Dim output As String = p.StandardOutput.ReadToEnd() ' 標準出力の読み取り output = output.Replace(vbCr + vbCrLf, vbLf) ' 改行コードの修正 TextBox1.Text = output ' [出力]ウィンドウに出力 試しに自分で文字を表示するだけのコンソールアプリを作成して試したのですがそれは取得できました。 目的のアプリが特殊なのでしょうか? ソースがあったので見てみたのですがC言語だった為詳しくわからなかったのですが、出力は「Console.WriteLine」ではなく「fputs」を使用して出力していました・・・これが原因なのでしょうか? どうにかして、出力を取得する方法はないものでしょうか? よろしくお願いします。

専門家に質問してみよう