5

IIS 7.5 で ASP.Net 4.0 Web アプリケーションを実行しています。System.Drawing.Printing.PrinterSettings.InstalledPrintersコマンドを使用して、インストールされているプリンターのリストを取得し、アプリケーションの各レポートを上記のプリンターに割り当てることができます。

アプリケーションのユーザー アカウントに完全な権限が設定されているサーバー上のネットワーク接続プリンターがいくつかある可能性があります。アプリケーションのユーザー アカウントが Windows からログオフするまで、すべてが完全に機能します。この時点で、ローカル プリンターのみが返され、ネットワーク接続プリンターは一覧表示されません。System.Drawing.Printing.PrinterSettings.InstalledPrinters

次の方法で、ネットワーク プリンターにアクセスできるユーザーに ASP.Net プロセスを偽装しようとしましたが、成功しませんでした。

  • アプリケーション プールProcess Modelを特定のユーザー ID として実行するように構成しました。
  • Web.Config でアプリケーションの ID を特定のユーザーに偽装しました。

    <identity impersonate="true" userName="user" password="pass"/>

  • advapi32.dll最後に、 APIを使用してコードに偽装を実装しました

上記のすべてのメソッドで、WindowsIdentity印刷時に真のユーザー名が返されます。

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

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

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

4

2 に答える 2

3

ネットワークに接続されたプリンター、共有フォルダー、およびマップ ドライブは、ユーザーが OS にログインしたときにのみアクセスできます。それらは一部のネットワーク リソースへのショートカットに過ぎず、対応するユーザーがログオフするとすべてが切断され、アクセスできなくなります。

System.Printing.PrintServerとメソッドを使用するとGetPrintQueues、プリント サーバーがホストする印刷キューのコレクションを取得できます。

PrintServerUNCNameは、対応するサーバーのUNC 名です。\\MyServerName

var printers = new PrintServer("PrintServerUNCName").GetPrintQueues()
    .Where(t =>
    {
        try { return t.IsShared && !t.IsNotAvailable; }
        catch { return false; }
    })
    .Select(t => t.FullName)
    .ToArray();
于 2013-02-15T16:50:45.733 に答える