2009-12-02 17 views
7

में एकाधिक आइकन एम्बेड करें मेरे पास एक WPF असेंबली है जिसमें मैं अपने एप्लिकेशन से जुड़े विभिन्न फ़ाइल प्रकारों के लिए पांच आइकन एम्बेड करना चाहता हूं। मैं इन आइकनों को अपने EXE में कैसे एम्बेड कर सकता हूं?WPF EXE

@smoore @Groky @ChrisF, धन्यवाद। दुर्भाग्यवश, यह मैंने नहीं पूछा है। मैं देखता हूं कि मेरा प्रश्न काफी अस्पष्ट 0_ डिग्री था। मुझे सवाल अलग तरीके से व्यक्त करते हैं:


मैं आइकन होते हैं, का कहना है कि Application.ico, Document.ico, आदि मेरी WPF परियोजनाओं में संसाधनों के रूप में। मैं इन मामलों को निम्नलिखित मामलों में निम्न के साथ एक्सेस करता हूं:

<Image Source="/MyAssembly;component/Resources/Icons/Application.ico" /> 

यह हर बार काम करता है। मुझे पता है कि।


मेरा प्रश्न यह है कि मैं रजिस्ट्री में फ़ाइल एसोसिएशन के लिए विंडोज एक्सप्लोरर से एक ही आइकन का उपयोग कैसे कर सकता हूं। मैं की तरह एक पथ के साथ माउस उपयोग करने में सक्षम होना चाहता हूँ: कैसे माउस HKEY_CLASSES_ROOT में फ़ाइल प्रकारों के साथ जुड़े रहे हैं में

C:\Program Files\MyApp\MyApp.exe,1 

की तरह।

AFAIK, मुझे संसाधन फ़ाइल (.rc) का उपयोग करना चाहिए, इसे संकलित करें और इसे मेरे EXE के साथ विलय करें। कुछ के साथ कुछ:

101 RT_ICON Application.ico 
102 RT_ICON Document.ico 
// etc... 

क्या यह WPF में सही तरीका है? क्या कोई विकल्प है, खासकर जब से यह विधि मेरे AssemblyInfo.cs से असेंबली संस्करण के क्षरण का कारण बनती है। मैं अभी भी असेंबली की जानकारी के बजाय संसाधन में संस्करण जानकारी लिखना चाहता हूं।

उत्तर

4

मैं एक समाधान पाया है उदाहरण के लिए एक निर्देशिका "संसाधन" में एक फ़ाइल Icon.png का उपयोग करके लोड किया जाएगा ! यह सही नहीं है लेकिन यह वही करता है जो मैं चाहता हूं! चूंकि मैंने समाधान खोजने के लिए बहुत लंबे समय तक स्कैंडिनेवियाई रात का उपयोग किया, मुझे लगता है कि मुझे इसे यहां साझा करना है।

यहाँ मैं क्या किया है:

1) एक गूंगा सांत्वना सी # अनुप्रयोग लिखा।

class ResTest { 
    static void Main() { 
     System.Console.WriteLine("Hello World!"); 
    } 
} 

2) परीक्षण करने के लिए है कि मेरे कोड काम एक सरल csc restest.cs किया।

3) नोटपैड खोल दिया और App.rc नामक फ़ाइल में निम्नलिखित लिखा।

101 ICON "Application.ico" 
102 ICON "Document.ico" 
103 ICON "Help.ico" 

4) rc /v App.rc, Resource Compiler Ran। एक नई फाइल, App.res दिखाई दिया था।

5) reran csc लेकिन इस बार:

csc /win32res:App.res restest.cs 

6) restest.exe अब 101 की आईडी के साथ आइकन थी और मैं Axialis IconWorkshop में दो अन्य प्रतीक मिल सका।


अब, मैंने देखा है कि मेरी विधानसभा जानकारी (संस्करण, उत्पाद नाम, blah blah blah ) गायब हो गए। मैंने VS_VERSION_INFO गुगल किया और VERSIONINFO संरचना के बारे में एमएसडीएन के आलेख के बारे में आया जो आरसी फाइलों में मुझे आवश्यक गुणों को परिभाषित करता है।

मैं एक और अधिक 'स्वचालित' विधि पसंद करता, लेकिन मुझे सी # एक्सप्रेस और विंडोज विस्टा एसडीके का उपयोग करके मैं जो करना चाहता हूं उसे करना चाहिए।

- आशा है कि आप इस का उपयोग कर सकते हैं ...

2

प्रोजेक्ट गुण -> संसाधन -> संसाधन जोड़ें -> नई चिह्न जोड़ें/मौजूदा फ़ाइल अपनी परियोजना संसाधनों के लिए फ़ाइलों को जोड़ने के अलावा

1

(पर किया जाए या नहीं आप पहले से ही आइकन बनाया है निर्भर करता है) जोड़े , आप फ़ाइलों को अपनी प्रोजेक्ट में जोड़ सकते हैं और संसाधन के लिए अपनी बिल्ड एक्शन सेट कर सकते हैं।

फिर आप स्रोत संपत्ति का उपयोग कर XAML से फ़ाइलों का संदर्भ ले सकते हैं।

<Image Source="/Resources/Icon.png"/> 

और आप का प्रयोग करेंगे कोड से फ़ाइल को लोड करने:

new BitmapImage(new Uri(@"pack://application:,,,/Resources/Icon.png")) 
3
  1. बनाएं app.rc:

    101 ICON "Application.ico" 
    102 ICON "Document.ico" 
    103 ICON "Help.ico" 
    
  2. संकलित:

    rc App.rc 
    
  3. App.res में जोड़े अपने प्रोजेक्ट (अपनी बिल्ड एक्शन के रूप में कोई भी नहीं छोड़ें)।
  4. बिल्ड करें।

सब कुछ किया गया!

+0

धन्यवाद पाया जा सकता है, कि मेरा है बिल्कुल जवाब दें। – Minustar

+2

ठीक है, बिल्कुल नहीं। मेरा कुछ विजुअल स्टूडियो का उपयोग करता है ... –

2

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

C:\path\to\InsertIcons.exe $(TargetPath) $(ProjectDir)icons 

एक और विवरण और एक डाउनलोड पर http://einaregilsson.com/add-multiple-icons-to-a-dotnet-application/