2010-07-07 16 views
7

मैं देव प्रयोजनों के लिए मेजबान फ़ाइल में प्रविष्टियों को प्रबंधित करने के लिए एक छोटी WPF उपयोगिता लिख ​​रहा हूं। जैसा कि आप जानते हैं कि मेजबान फ़ाइल को नए ओएस (विन 7/2008/Vista) द्वारा संरक्षित किया गया है।विंडोज 7/सर्वर 2008 में मैं मेजबान फ़ाइल को प्रोग्रामेटिक रूप से कैसे संपादित कर सकता हूं?

मैं requestedExecutionLevel करने के लिए "requireAdministrator" स्थापित करने के लिए अपने आवेदन करने के लिए एक प्रकट जोड़ दिया है, ("आसान तरीका" का प्रयोग करके) और संबंधित सवाल here में विस्तृत here के रूप में।

दुर्भाग्यवश यह मेरे लिए काम नहीं किया है। जब मैं ऐप शुरू करता हूं, तब कोई एलिमेंट प्रॉम्प्ट नहीं होता है, और मेजबान फ़ाइल के लिए File.AppendText को कॉल करने के लिए अभी भी सिस्टम का कारण बनता है। अनधिकृत एक्सेस अपवाद को फेंक दिया जाना चाहिए: "पथ तक पहुंच 'सी: \ विंडोज \ System32 \ drivers \ etc \ hosts' है से इनकार किया। "

HostsChanger.exe.manifest:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
<assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="HostsChanger" type="win32"/> 
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> 
    <security> 
     <requestedPrivileges> 
      <requestedExecutionLevel level="requireAdministrator"/> 
     </requestedPrivileges> 
    </security> 
</trustInfo> 
</assembly> 

कोई भी विचार?

+0

तो, अगर आप ऊपर नहीं बढ़ रहे हैं तो सुरक्षित रजिस्ट्री कुंजियों तक पहुंचने पर अपवाद पूरी तरह से अपेक्षित है। मैंने सभी चरणों को याद रखने के लिए पर्याप्त रूप से प्रकट नहीं किया है, हालांकि, मुझे नहीं पता कि आपने जो प्रयास किया है वह आपके लिए काम नहीं कर रहा है। –

+0

हां अपवाद की उम्मीद है ... और उन्नयन को हल करना चाहिए लेकिन एक संकेत की कमी से संकेत मिलता है कि ऊंचाई नहीं बढ़ रही है। – bszom

+0

मैं एक साधारण होस्टस्चेंजर प्रोग्राम की तलाश में हूं लेकिन मुझे अभी तक कोई नहीं मिला है – JasonDavis

उत्तर

3

भावानूदित, एक जवाब में बदल गया ऐप के रूप में मैं काम पर काम कर रहा हूं, और ऊंचाई इसके लिए काम कर रही है। यहां अंतर यह है कि फ़ाइल नाम "app.manifest" है, और प्रोजेक्ट विकल्प "मैनिफेस्ट" (एप्लिकेशन टैब पर) इसे इंगित कर रहा है।

2

मुझे यकीन है कि यह करता है, तो कोई फर्क करेंगे लेकिन अपने प्रकट टुकड़ा है कि यह कैसे किया जाना चाहिए की मेरी समझ से थोड़ा भिन्न है (कि हालांकि विभिन्न संस्करणों हो सकता है) नहीं कर रहा हूँ: अन्यथा

<?xml version="1.0" encoding="utf-8"?> 
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <assemblyIdentity version="1.0.0.0" name="HostsChanger" /> 
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> 
     <security> 
     <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> 
      <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 
     </requestedPrivileges> 
     </security> 
    </trustInfo> 
</asmv1:assembly> 

, एक चारों ओर काम करने के लिए एक अलग "लोडर" ऐप होना चाहिए जो उपयोगकर्ता के साथ शुरू होता है और Verbrunas का उपयोग करके केवल अपना असली WPF टूल शुरू करता है जैसा कि this ब्लॉग पोस्ट (इसलिए Process.StartInfo.Verb = "runas";) में विस्तृत है।

+0

दुर्भाग्य से आपका मैनिफेस्ट स्निपेट या तो काम नहीं करता है। मैंने रनस क्रिया के साथ एक नई प्रक्रिया शुरू करने के बारे में सोचा था जब भी मेजबान फ़ाइल में बदलाव की आवश्यकता होती है - लेकिन यह यूएसी सक्षम उपयोगकर्ता के लिए ऐप की उपयोगिता को गंभीर रूप से प्रभावित करेगा (यानी: यह कमजोर परेशान होगा)। शुरुआत में एक यूएसी संकेत बेहतर होगा। कोई अपराध नहीं, लेकिन एक लोडर ऐप एक हैक है और मैं इसके बजाय इसे टालना चाहता हूं, लेकिन इनपुट के लिए धन्यवाद। – bszom

+1

तो, यह बिल्कुल सही है कि मैनिफेस्ट ऐप के लिए कैसे दिखता है मैं काम पर काम कर रहा हूं, और ऊंचाई इसके लिए काम कर रही है। यहां अंतर यह हो सकता है कि फ़ाइल नाम "app.manifest" है, और प्रोजेक्ट विकल्प "मैनिफेस्ट" (एप्लिकेशन टैब पर) इसे इंगित कर रहा है। –

+0

मेरे पास प्रोजेक्ट गुण मैनिफेस्ट फ़ाइल पर सेट हैं। मैं इसे app.manifest में नाम देने का प्रयास करूंगा ... हालांकि यह आशावादी लगता है।तो आपको एप्लिकेशन की शुरुआत पर संकेत मिलता है? क्या यह डब्ल्यूपीएफ है? मेरा ऐप विंडोलेस (ट्रेयिकॉन और डब्ल्यूपीएफ उपयोगकर्ता-नियंत्रण केवल) है, क्या यह एक कारक हो सकता है? – bszom

1

मैं यहां अंधेरे में एक स्टैब लेने जा रहा हूं और कहता हूं कि यह एक प्रामाणिक हस्ताक्षर मुद्दा है। मैंने आपके आवेदन पर हस्ताक्षर करने के बारे में कुछ भी नहीं सुना है। जहां तक ​​मेरी समझ जाती है, विस्टा के विपरीत, विंडोज 2008/7 में एक एप्लिकेशन को चलाने का एकमात्र तरीका एक हस्ताक्षरित एप्लिकेशन मैनिफेस्ट होना है जो एप्लिकेशन को आवश्यक विशेषाधिकार स्तर की पहचान करता है। आप प्रवेश करने में सहायता की जरूरत है, तो यहां आपको अपने आवेदन पत्र पर हस्ताक्षर करने के लिए पर एक लेख है:

जवाब ho1 दिया एक app.manifest बिल्कुल वैसा ही है कि शामिल हैं: मेरी पहले टिप्पणी से http://msdn.microsoft.com/en-us/library/bb756995.aspx

+0

यह भी मानते हुए कि आप पहले से ही इस वर्कफ़्लो का पालन कर चुके हैं लेकिन संदर्भ या चेकलिस्ट के लिए यहां उपलब्ध कराने जा रहे हैं: http://msdn.microsoft.com/en-us/library/bb756973.aspx – Sai

+0

ऐप.नामिपिफ़ में नाम बदलने के बाद, वीएस अधिसूचित करता है यह डीबग करने के लिए व्यवस्थापक के रूप में चलाया जाना चाहिए (जैसा कि अपेक्षित है; मैंने पोस्ट किया गया पहला लिंक देखें)। ऐप में अब होस्ट फ़ाइल में लेखन पहुंच है। दूसरे शब्दों में: ऊंचाई अब एक हस्ताक्षरित ऐप के साथ भी सही ढंग से काम करती है। मुझे लगता है कि हस्ताक्षर का लाभ यह है कि उपयोगकर्ता को हस्तक्षेप करने की आवश्यकता नहीं है, लेकिन यह सिर्फ एक धारणा है। जानकारी के लिए धन्यवाद! – bszom