2011-08-05 9 views
8

मैं नेटवर्क किए गए प्रिंटर को जोड़ने के लिए कोड बनाने के लिए WMI कोड निर्माता का उपयोग कर रहा हूं।सी #/.NET: स्थानीय पीसी खाते में नेटवर्क किए गए प्रिंटर को कैसे जोड़ा जाए?

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 तक पहुंच नहीं है।

मैं उपरोक्त कोड में डोमेन उपयोगकर्ता (सेवा खाता) उपयोगकर्ता नाम और पासवर्ड कहां डाल सकता हूं?

मैं घंटों तक गुगल रहा हूं लेकिन मुझे लगता है कि एक बेवकूफ पोस्ट है जो रिमोट मशीन पर एक प्रिंटर जोड़ने के लिए कहता है, जो मैं नहीं कर रहा हूं।

(मैं वर्तमान पीसी के लिए एक दूरस्थ प्रिंटर को जोड़ने के लिए, एक दूरस्थ पीसी के लिए नहीं की जरूरत है।) (चेतावनी है कि उपयोगकर्ता पर लॉग इन एक स्थानीय पीसी खाता है।)

किसी को भी पता है कि कैसे यह हासिल किया जा सकता है?

+0

प्रिंटसेवर पर अतिथि खाता बेहतर सक्षम करें। – Skomski

उत्तर

1

आप, प्रिंट सर्वर पर एक ही स्थानीय खाता बना सकते हैं ऐसा करके सहकर्मी से सहकर्मी प्रमाणीकरण सक्षम करने ...

अर्थात pc1 उपयोगकर्ता bob1 स्थानीय स्तर पर है। प्रिंट सर्वर पर bob1 उपयोगकर्ता बनाते हैं।

अपने मानचित्र प्रोग्राम को पीसी 1 पर bob1 के रूप में चलाएं और आपको प्रिंटर तक पहुंचने में सक्षम होना चाहिए।

क्या यह मदद करता है?

अन्यथा, नेटवर्क प्रिंटर प्रति उपयोगकर्ता हैं ... आपके प्रोग्राम को डोमेन उपयोगकर्ता के रूप में चलाने के लिए उपयोग करना है (यानी रनस) काम नहीं करेगा क्योंकि यह केवल प्रिंटर को उपयोगकर्ता सत्र में मैप करेगा, न कि आप वास्तव में चाहते हैं ।

... इसके बारे में क्या? http://www.codescript.co.uk/wmi_connect_as_another_user.htm

... या स्क्रिप्टमैटिक? http://www.microsoft.com/download/en/details.aspx?DisplayLang=en&id=12028 (यहां तक ​​कि यद्यपि यह ग # के लिए नहीं है, यह अभी भी WMI synatx सामान दे सकते हैं)

+0

दुर्भाग्यवश, मेरे पास प्रिंट सर्वर पर उपयोगकर्ताओं या उपयोगकर्ता पहुंच को संशोधित करने की पहुंच नहीं है; मेरे पास केवल पढ़ने की पहुंच है (मेरे डोमेन खाते में है)। मैं उन लिंक को देखूंगा, लेकिन सिर्फ उस पर प्रतिक्रिया देना चाहता था और देख रहा था कि इस दौरान किसी के पास अन्य सुझाव थे या नहीं। – JohnnyRockets

+0

शायद नेट उपयोग प्रिंटर मैपिंग के साथ दूसरे उपयोगकर्ता के रूप में काम करता है? http://www.experts-exchange.com/OS/Microsoft_Operating_Systems/Windows/2000/Q_23440726।एचटीएमएल –

+0

यदि आप लिंक पर नहीं पहुंच पा रहे हैं - उदाहरण के लिए उनका इस्तेमाल किया गया था - नेट उपयोग lpt1 "\\ ws44a03 \ HP Lj1300"/उपयोगकर्ता: उपयोगकर्ता उपयोगकर्ता/व्यक्ति: हाँ –

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

       } 
      } 

    } 
संबंधित मुद्दे