2012-05-06 8 views
5

IIS 7.5で実行されているASP.Net 4.0 Webアプリケーションがあります。System.Drawing.Printing.PrinterSettings.InstalledPrintersコマンドを使用して、インストールされているプリンタのリストを取得し、 !ネットワーク接続されたプリンタがASP.Netアプリケーションで使用できない

は、いくつかのネットワークに接続されたプリンタがすべてのアプリケーションのユーザーアカウントに完全な特権で設定したサーバー上のがあるかもしれません、すべてはこの時点では、System.Drawing.Printing.PrinterSettings.InstalledPrintersリターンのみローカルプリンタを窓の外のアプリケーションのユーザー・アカウントがログインするまで完璧に動作しますネットワークに接続されたプリンタは一覧表示されません。

私は、次の方法でネットワークプリンタへのアクセス権を持つユーザーにASP.Netのプロセスを偽装しようとしたん、まだ成功しました

:私は 特定のユーザーとして実行するアプリケーションプールProcess Modelを構成し

  • 身元。
  • 私は のWeb.Configで、特定のユーザーへのアプリケーションのIDを偽装:advapi32.dll API上記の方法の全てにおいて

を使用してコードで偽装を実装

​​

  • そして最後にWindowsIdentityは、印刷時に実際のユーザー名を返します。

    System.Security.Principal.WindowsIdentity.GetCurrent().Name 
    

    しかし、ここでは偽装は問題ではないようです。ユーザーがログオフすると、ネットワーク接続されたすべてのプリンタは消えてしまいました。

    これを解決する方法を知っている人はいますか?ユーザーがログインしていなくてもネットワーク接続プリンターにアクセスする方法はありますか?

  • +0

    に私たちがしているよう

    PrintServerUNCNameは、対応するサーバのUNC nameです同じ問題を抱えています...あなたはこれに対する解決策を見つけましたか? – JDT

    答えて

    3

    ネットワーク接続されたプリンタ、共有フォルダや地図ドライブがOSにのみアクセスする際、ユーザーがログインしている、彼らは、かろうじていくつかのネットワークリソースへのショートカットであるすべて切断され、対応するユーザーがログオフしたときにアクセスできません!あなたがそのプリントサーバーのホスト印刷キューのコレクションを取得することができますSystem.Printing.PrintServerGetPrintQueues方法を使用して

    \\MyServerName

    var printers = new PrintServer("PrintServerUNCName").GetPrintQueues() 
        .Where(t => 
        { 
         try { return t.IsShared && !t.IsNotAvailable; } 
         catch { return false; } 
        }) 
        .Select(t => t.FullName) 
        .ToArray(); 
    
    0

    次のリンクを参考にしてみてください。サーバー上に名前でプリンタを追加し、UNCではなく名前を使用してプリンタにアクセスする必要があります。

    Printing from ASP.NET to a network printer