2011-08-05 17 views
8

Ağa bağlı bir yazıcı eklemek için kod oluşturmak için WMI Kod Oluşturucu kullanıyorum.C#/NET: Ağa bağlı yazıcı yerel bir PC hesabına nasıl eklenir?

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

(zaten benim etki alanı hesabı altında) büyük eserler üretilmiştir kodu:

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

Ancak, ben, yani yerel bir bilgisayar hesabına Ağa bağlı bir yazıcı eklemek gerekir \ PrintServer'a erişimi olmayan bir etki alanı dışı hesap.

Bir etki alanı kullanıcısının (bir hizmet hesabı) kullanıcı adı ve parolasını yukarıdaki koda nereye koyabilirim?

Saatlerce Google'da çalışıyorum, ancak bulabildiğim tek şey, uzaktaki bir makineye yazıcının nasıl ekleneceğini söyleyen bir aptal yazım.

(Ben bir uzak bilgisayara, akım PC'ye uzak yazıcı eklemek gerekir.) (Uyarı oturum açan kullanıcının yerel bilgisayar hesabı olmasıdır.)

Herkes biliyor mu Bu başarılabilir mi?

+0

Konuk hesabını PrintServer üzerinde daha iyi etkinleştirin. – Skomski

cevap

1

Eğer böyle yaparak eşler arası kimlik doğrulamasını sağlayan yazdırma sunucusunda aynı yerel hesap oluşturabilir ...

yani PC1 yerel kullanıcı bob1 sahiptir. , bob1'i baskı sunucusunda bir kullanıcı yapar.

Harita programınızı pc1'de bob1 olarak çalıştırın ve yazıcıya erişebilmeniz gerekir.

bu yardımı yapar mı?

Aksi takdirde, ağ yazıcıları kullanıcı içindir ... programınızı, erişimi olan (örneğin, runas) etki alanı kullanıcısı olarak çalıştırmanız, yazıcıyı yalnızca istediğiniz kullanıcı oturumuna değil, kullanıcı oturumuna eşleyeceği için çalışmayacaktır. .

... buna ne dersiniz? http://www.codescript.co.uk/wmi_connect_as_another_user.htm

... veya scriptomatic? http://www.microsoft.com/download/en/details.aspx?DisplayLang=en&id=12028 diğer cevap

+0

Maalesef, kullanıcıları veya yazıcı sunucusundaki kullanıcı erişimini değiştirmek için erişimim yok; Sadece okuma erişimi var (etki alanı hesabım). Bu bağlantıları kontrol edeceğim, ancak sadece buna yanıt vermek istedim ve bu arada başka birinin önerileri olup olmadığını görmek istedim. – JohnnyRockets

+0

belki de net kullanım, yazıcı eşlemesi ile başka bir kullanıcı olarak çalışır? http://www.experts-exchange.com/OS/Microsoft_Operating_Systems/Windows/2000/Q_23440726.html –

+0

bağlantıya ulaşamıyorsanız - kullanmış oldukları örnek - NET USE lpt1 "\\ ws44a03 \ HP Lj1300"/kullanıcı: kullanıcı kullanıcı/PERSISTENT: YES –

0

çıkarıldı Yani beri (o C# için değil Tho bile, hala wmı synatx şeyler verebilir). Sadece bunu test ettim ve işe yaradı. İşte ben https://www.codeproject.com/Articles/10090/A-small-C-Class-for-impersonating-a-User kullanıyorum sınıf almak için bağlantı İşte benim için çalışan aşağıdaki kod aşağıdadır. Eğer bakarsanız, kullanıcıların kimliğine bürünmek için bazı daha iyi sınıf uygulamaları vardır.

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

       } 
      } 

    } 
İlgili konular