Sn.exe

2010-06-29 10 views
7

में मैं पोस्ट का निर्माण घटना बनाने के लिए निम्नलिखित करने की आवश्यकता ऑटो में प्रवेश पासवर्ड: दृश्य स्टूडियो 1 बयान यह एक पासवर्ड की आवश्यकता है निष्पादित करता है और इंतजार कर रहा है जब तक उपयोगकर्ता यह निर्दिष्ट करता हैSn.exe

sn -i MyKey.pfx MyKeyContainerName 
tlbimp $(ConfigurationName)\MyCom.tlb /out:$(ConfigurationName)\NETMyCom.dll /keycontainer:MyKeyContainerName 
sn -d MyKeyContainerName 

और विफल रहता है।

Microsoft (R) .NET फ्रेमवर्क मजबूत नाम उपयोगिता संस्करण 2.0.50727.42 कॉपीराइट (c) Microsoft Corporation। सभी अधिकार सुरक्षित।

PKCS # 12 कुंजी फ़ाइल के लिए पासवर्ड दर्ज करें: mykey.pfx में PKCS पार्स करने के लिए # 12 ब्लॉब विफल - संभाल अमान्य है।

मैंने स्न कमांड लाइन तर्कों का उपयोग करके पासवर्ड निर्दिष्ट करने का प्रयास किया, लेकिन मुझे ऐसा करने का कोई तरीका नहीं दिखाई दे रहा था।

कृपया मदद करें।

सम्मान, हिल्मी।

+2

क्या कोई कारण है कि आप विजुअल स्टूडियो की अपनी कुंजी-हस्ताक्षर सुविधा का उपयोग नहीं कर सकते हैं? (प्रोजेक्ट के लिए गुणों की जांच करें।) –

उत्तर

3

अगर मेरे जैसे, आप TFS या MSBuild का उपयोग कर निर्माण करने के लिए नहीं कर रहे हैं, तो कम से कम 2 अन्य तरीके हैं:

क) एक स्क्रिप्ट से रन sn.exe, और

stdin करने के लिए पासवर्ड लिखना

टिप्पणी:

एक सी # उदाहरण के लिए here देख sn.exe की .NET4 संस्करण के साथ यह बाह्य प्रक्रिया (कम से कम Windows XP पर) के रूप में यह निष्पादित और stdin करने के लिए पासवर्ड लिखने के लिए असंभव प्रतीत हो रहा है (मैंने सी # के साथ अजगर + के साथ प्रयास किया, और sn.exe पासवर्ड के इंतजार किए बिना बस बाहर निकलता प्रतीत होता है इनपुट)।

बी) पासवर्ड को फिर से साइन करने के लिए sn.exe का उपयोग करें, एक पीएफएक्स का उपयोग कर जो पहले ही स्थापित हो चुका है।

आप पहले से ही PFX फ़ाइल स्थापित किया है, तो आप कंटेनर का नाम पता हो सकता है (आमतौर पर दृश्य स्टूडियो VS_KEY_ABAB1234ABAB1234 की तरह एक नाम का उपयोग करता)

, तो मेरे जैसे, आप जानते हैं या कंटेनर नाम याद नहीं है, तो बस फिर से स्थापित PFX फ़ाइल:

sn -i myPfxFile VS_KEY_ABAB1234ABAB1234 

sn.exe के रूप में यह PFX फ़ाइल में प्रमाण पत्र को स्थापित करता है, पासवर्ड के लिए संकेत देगा।

तब आप अपने विधानसभा sn.exe फिर से प्रवेश करते हैं, पासवर्ड के लिए बिना किसी संकेत कर सकते हैं:

sn -Rca myAssembly.dll myVSkey 

के ऊपर एक निर्माण स्क्रिप्ट में प्रयोग किया जा सकता है, के रूप में कोई बातचीत :-)

की आवश्यकता है

नायब कि हस्ताक्षर करने के लिए वास्तव में काम करता है की जाँच करने के लिए याद:

sn -v myAssembly.dll 
2

मैं इस समस्या को एक सी ++ DLL है कि मैं एक ClickOnce सी # अनुप्रयोग में उपयोग करने के साथ आज आए थे,।

मैं DLL पर देरी पर हस्ताक्षर करने की स्थापना की है, तो इसलिए की तरह एस.एन. चलाने के लिए एक के बाद निर्माण घटना प्रयोग किया है:

ECHO <your-password-here> | sn.exe -R $(OutDir)$(TargetFileName) $(MSBuildProjectDirectory)<path-to-pfx-file> 

होगा प्यार ओल्ड-स्कूल बैच तरीकों। ECHO <your-password-here> आपके पासवर्ड को प्रिंट करता है, पाइप | पाइप जो एसएन.एक्सई के साथ आउटपुट करते हैं, जो पासवर्ड लेता है।

आपको शायद साइन इन करने की आवश्यकता नहीं होगी और -R स्विच जैसा मैंने किया था, लेकिन आपको विचार मिलता है।

संपादित करें: यह संभवतः कोई लंबा काम नहीं - मेरा उत्तर 2013 से था और मैं फिर वीएस -2010 का उपयोग कर रहा था।

+0

एक अन्य महत्वपूर्ण बात यह जानना कि मुझे अभी याद आया है: यदि आप इस कमांड को बैच फ़ाइल में डाल रहे हैं, और आपके पासवर्ड में '%' प्रतीक है, तो आपको उनमें से दो का उपयोग करें। यदि आपका पासवर्ड 'सुपर% कूल% लड़का' है, तो आपको बैच फ़ाइल * केवल * में 'super %% cool %% guy' का उपयोग करने की आवश्यकता है। –

+4

विचार बहुत अच्छा है, लेकिन बैच फ़ाइल पर काम नहीं करता है। 'sn.exe' कंसोल इनपुट रीडायरेक्शन स्वीकार नहीं करता है और इसके बारे में शिकायत करता है: 'कंसोल इनपुट पासवर्ड प्रविष्टि के लिए रीडायरेक्ट नहीं किया जा सकता है'। किसी भी विचार को बैच फ़ाइल में कैसे प्राप्त किया जाए? –

+0

मुझे इसके साथ कोई समस्या नहीं थी। क्या आप अपनी बैच फ़ाइल सामग्री पोस्ट कर सकते हैं? (मैंने इसे कुछ साल पहले किया था और शायद नवीनतम एसएन.एक्सई इसे अनुमति नहीं देता है) –

1

मैं अब लगभग दो दिनों से इसका शोध कर रहा हूं। मैंने sn.exe के पुराने संस्करणों की कोशिश की (2.0 तक वापस जा रहा है!), लेकिन मुझे काम करने के लिए echo PASSWORD | चाल नहीं मिल सका।

[void] [System.Reflection.Assembly]::LoadWithPartialName("'System.Windows.Forms") 

Start-Process "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\sn.exe " -ArgumentList "-i 
`"Certificate.pfx`" VS_KEY_XXXXXXX" -NoNewWindow -Wait 
[System.Windows.Forms.SendKeys]::SendWait("PASSWORDHERE~") 
  • SendWait() वर्तमान सक्रिय विंडो के लिए कुंजी भेजता है:

    अंत में, मैं ऐसा किया। चूंकि हम संशोधक के साथ Start-Process का उपयोग कर sn.exe शुरू कर रहे हैं, इसलिए हमारी विंडो पहले से ही केंद्रित है।

  • ~ एक विशेष वर्ण है, जो ENTER बटन का प्रतिनिधित्व करता है। {ENTER} भी संभव है, लेकिन यह आपके कीबोर्ड पर numpad के पास एंटर बटन के लिए है। शायद कोई फर्क नहीं पड़ता है, लेकिन मैं बस सुनिश्चित करना चाहता था।

स्रोत मैं प्रयोग किया है: https://technet.microsoft.com/en-us/library/ff731008.aspx

मैं -NoNewWindow की वजह से अंत में विजुअल बेसिक के AppActivate() जरूरत नहीं थी।

अद्यतन: -Wait तर्क के साथ भी बेहतर काम करता है!