2011-08-05 42 views
8

我正在使用WMI Code Creator创建添加联网打印机的代码。C#/。NET:如何将联网打印机添加到本地PC帐户?

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

这是产生伟大的作品(在我的域帐户反正)代码:

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); 
      } 
     } 
    } 
} 

不过,我需要到网络打印机添加到本地计算机帐户,即一个无权访问\ PrintServer的非域帐户。

我可以在哪里将域用户的(服务帐户)用户名和密码放入上面的代码中?

我一直在谷歌搜索几个小时,但我可以找到的是一个愚蠢的职位,说如何在远程机器上添加一台打印机,这不是我想要做的。

(我需要一个远程打印机添加到当前 PC,而不是到远程计算机。)(需要说明的是登录的用户是本地计算机帐户)。

有谁知道这可以实现?

+0

更好地启用打印服务器上的Guest帐户。 – Skomski

回答

1

您可以创建在打印服务器上相同的本地帐户,这样做使对等网络认证...

即PC1具有本地用户bob1。 使bob1成为打印服务器上的用户。

在pc1上运行你的地图程序为bob1,你应该能够到达打印机。

这有帮助吗?

否则,网络打印机是每个用户......运行你的程序作为有权访问的域用户(即runas)不起作用,因为它只是将打印机映射到用户会话而不是你想要的那个。

...这是怎么回事? http://www.codescript.co.uk/wmi_connect_as_another_user.htm

...或scriptomatic? http://www.microsoft.com/download/en/details.aspx?DisplayLang=en&id=12028 (即使寿它不是C#的,它仍然可以给WMI synatx东西)

+0

不幸的是,我无权修改打印服务器上的用户或用户访问权限;我只有读取权限(对我的域帐户)。 我会检查这些链接,但只是想回应,看看有没有人在此期间提出其他建议。 – JohnnyRockets

+0

也许网络使用与另一个用户的打印机映射工作? http://www.experts-exchange.com/OS/Microsoft_Operating_Systems/Windows/2000/Q_23440726。html –

+0

万一你无法进入链接 - 他们使用的例子是 - NET USE lpt1“\\ ws44a03 \ HP Lj1300”/ user:user user/PERSISTENT:YES –

0

如此以来,除去其他的答案。我只是测试了这一点,它的工作。这里是获得我正在使用的课程的链接https://www.codeproject.com/Articles/10090/A-small-C-Class-for-impersonating-a-User 以下是为我工作的代码。如果你看起来有一些更好的实现类来模拟用户。

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); 

       } 
      } 

    } 
相关问题