2011-08-05 35 views
8

Tôi đang sử dụng Trình tạo mã WMI để tạo mã để thêm máy in được nối mạng.C# /. NET: Cách thêm máy in được nối mạng vào tài khoản PC cục bộ?

http://img13.imageshack.us/img13/9847/wmicodecreatorwin32prin.png

Mã được tạo ra tác phẩm vĩ đại (theo tài khoản tên miền của tôi anyway):

using System; 
using System.Management; 
using System.Windows.Forms; 

namespace WMISample 
{ 
    public class CallWMIMethod 
    { 
     public static void Main() 
     { 
      try 
      { 
       ManagementClass classInstance = 
        new ManagementClass("root\\CIMV2", 
        "Win32_Printer", null); 

       // Obtain in-parameters for the method 
       ManagementBaseObject inParams = 
        classInstance.GetMethodParameters("AddPrinterConnection"); 

       // Add the input parameters. 
       inParams["Name"] = "\\\\PrintServer\\PrinterName"; 

       // Execute the method and obtain the return values. 
       ManagementBaseObject outParams = 
        classInstance.InvokeMethod("AddPrinterConnection", inParams, null); 

       // List outParams 
       Console.WriteLine("Out parameters:"); 
       Console.WriteLine("ReturnValue: " + outParams["ReturnValue"]); 
      } 
      catch(ManagementException err) 
      { 
       MessageBox.Show("An error occurred while trying to execute the WMI method: " + err.Message); 
      } 
     } 
    } 
} 

Tuy nhiên, tôi cần phải thêm một máy in mạng vào một tài khoản máy tính địa phương, tức là tài khoản không phải miền không có quyền truy cập vào \ PrintServer.

Tôi có thể đặt tên người dùng và mật khẩu của tài khoản người dùng (tài khoản dịch vụ) vào mã ở trên?

Tôi đã là Googling hàng giờ nhưng tất cả những gì tôi có thể tìm thấy là một bài đăng ngu ngốc nói cách thêm máy in trên máy từ xa, đó không phải là những gì tôi đang tìm kiếm.

(tôi cần phải thêm một máy in từ xa đến hiện PC, không để một máy tính từ xa.) (Thông báo trước là đăng nhập người dùng là một tài khoản máy tính địa phương.)

Có ai biết làm thế nào điều này có thể đạt được?

+0

Bật tài khoản khách trên PrintServer tốt hơn. – Skomski

Trả lời

1

bạn có thể tạo các tài khoản cục bộ tương tự trên máy chủ in, cho phép peer-to-peer xác thực bằng cách làm như vậy ...

ví dụ: pc1 có sử dụng bob1 tại địa phương. đặt bob1 thành người dùng trên máy chủ in.

chạy chương trình bản đồ của bạn dưới dạng bob1 trên pc1 và bạn sẽ có thể truy cập máy in.

điều đó có hữu ích không?

nếu không, máy in mạng cho mỗi người dùng ... chạy chương trình của bạn khi người dùng miền có quyền truy cập (tức là runas) sẽ không hoạt động vì nó chỉ đơn giản là ánh xạ máy in đến phiên người dùng chứ không phải bản in mà bạn thực sự muốn .

... điều này thì sao? http://www.codescript.co.uk/wmi_connect_as_another_user.htm

... hoặc tập lệnh? http://www.microsoft.com/download/en/details.aspx?DisplayLang=en&id=12028 (ngay cả tho nó không phải là cho C#, nó vẫn có thể cung cấp cho công cụ wmi synatx)

+0

Thật không may, tôi không có quyền truy cập để sửa đổi người dùng hoặc quyền truy cập của người dùng trên máy chủ in; Tôi chỉ có quyền truy cập đọc (vào tài khoản miền của tôi). Tôi sẽ kiểm tra các liên kết đó, nhưng chỉ muốn trả lời và xem liệu có ai có đề xuất khác trong thời gian chờ đợi không. – JohnnyRockets

+0

có lẽ các công trình sử dụng mạng với ánh xạ máy in là một người dùng khác? http://www.experts-exchange.com/OS/Microsoft_Operating_Systems/Windows/2000/Q_23440726.html –

+0

trong trường hợp bạn không thể truy cập liên kết - ví dụ họ đã sử dụng là - SỬ DỤNG MẠNG lpt1 "\\ ws44a03 \ HP Lj1300"/người dùng: user user/PISTISTENT: YES –

0

Vì vậy, câu trả lời khác đã được gỡ bỏ. Tôi chỉ thử nghiệm này và nó đã làm việc. Đây là liên kết để có được lớp tôi đang sử dụng https://www.codeproject.com/Articles/10090/A-small-C-Class-for-impersonating-a-User Đây là mã bên dưới đã làm việc cho tôi. Nếu bạn nhìn có một số triển khai tốt hơn các lớp học ở đó để mạo danh người dùng.

static void Main(string[] args) 
    { 

     using (new Impersonator("username", "domainName", "myPassword")) 
     { 
      // The following code is executed under the impersonated user. 
      AddPrinterUnc(@"\\PrintServer\printershare"); 
     } 


    } 

    public static void AddPrinterUnc(string printUncPath) 
    { 

      using (ManagementClass oPrinterClass = new ManagementClass(new ManagementPath("Win32_printer"), null)) 
      { 
       using (ManagementBaseObject oInputParameters = oPrinterClass.GetMethodParameters("AddPrinterConnection")) 
       { 
        oInputParameters.SetPropertyValue("Name", printUncPath); 

        oPrinterClass.InvokeMethod("AddPrinterConnection", oInputParameters, null); 

       } 
      } 

    } 
Các vấn đề liên quan