2012-05-01 15 views
16

हम क्लिकऑन के माध्यम से तैनात किए जाने वाले एक एप्लिकेशन को विकसित कर रहे हैं। हमारे पास वेरिसाइन कोड हस्ताक्षर प्रमाणपत्र है जिसका उपयोग हम अपने आवेदन पर हस्ताक्षर करने के लिए कर रहे हैं (signtool.exe पोस्ट-बिल्ड के माध्यम से) और हमारे क्लिकऑन मैनिफ़ेस्ट। वर्तमान में हमें हस्ताक्षर से संबंधित दो समस्याएं हैं:क्लिकऑन हमारे निष्पादन योग्य पर हस्ताक्षर करता है और कहता है "अज्ञात प्रकाशक"

  1. हम अपने प्रमाणपत्र का उपयोग कर हमारे .exe पर हस्ताक्षर कर रहे हैं। हमारे आवेदन के निर्माण के बाद, हम देख सकते हैं कि यह हस्ताक्षरित है (उदाहरण के लिए, "signtool सत्यापित/pa TheExecutable.exe" के माध्यम से)। लेकिन ClickOnce के माध्यम से एप्लिकेशन इंस्टॉल करने के बाद, .exe अब हस्ताक्षरित नहीं है।

  2. हम अपने प्रमाणपत्र का उपयोग कर हमारे क्लिकऑन मैनिफ़ेस्ट पर हस्ताक्षर कर रहे हैं। लेकिन जब हम ClickOnce के माध्यम से एप्लिकेशन इंस्टॉल करने का प्रयास करते हैं, तो क्लिकऑन इंस्टॉलर "अज्ञात प्रकाशक" कहता है।

समस्या # 1 हमेशा हुआ है। समस्या # 2 कभी-कभी रहस्यमय तरीके से गायब हो जाती है, लेकिन इसके तुरंत बाद यह हमेशा वापस आती है, और हम इसे कुछ हफ्तों के लिए लगातार देख रहे हैं।

कोई विचार?

+0

बैकअप योजना के रूप में, आप वीएस में एक्सई प्रोजेक्ट "साइनिंग" प्रॉपर्टी टैब और कमांड लाइन से msbuild.exe का उपयोग करके कोडिंगिंग सेट अप करने का प्रयास कर सकते हैं। आदर्श नहीं, मुझे पता है। – anthony

+2

@anthony: हस्ताक्षर संपत्ति टैब मजबूत नामकरण (यानी .NET हस्ताक्षर) के लिए है, Win32 हस्ताक्षर (प्रमाणीकरण नहीं)। विंडोज़ केवल प्रमाणीकरण के बारे में परवाह करता है :( –

+0

आह, हाँ, आप सही हैं। – anthony

उत्तर

13

ठीक है, इस प्रश्न के 1/2 के लिए रहस्य हल किया गया: क्लिकऑन bin से एप्लिकेशन को प्रकट करता है, लेकिन obj से वास्तविक EXE लेता है। अपने हस्ताक्षरित exe को वितरित करने के लिए, आपको obj निर्देशिका में फ़ाइल पर हस्ताक्षर करना होगा।

संपादित करें: यहां दूसरा आधा है। .NET 4.5 बीटा ब्रेकिंग VO2010 में भी क्लिकऑन हस्ताक्षर/सत्यापन को तोड़ता है।

+2

आप बहुत ही अच्छे हैं। एक और चीज जिसे मैंने मारा था, एक बार हस्ताक्षर किए गए थे, "" के साथ क्लिकऑन्स मेनिफेस्ट विफल रहता है, इस व्यक्ति के ब्लॉग पोस्ट के अनुसार "मैनिफेस्ट में निर्दिष्ट की तुलना में एक अलग गणना की हैश है: http: // ब्लॉग। msdn.com/b/gauravb/archive/2008/10/06/clickonce-filename-has-a- अलग-computed-hash-than- निर्दिष्ट-in-manifest.aspx को Microsoft.Common.targets को संपादित करने और सम्मिलित करने की आवश्यकता है लाइन "_CopyManif estFiles; "" PublishOnlyDependsOn "खंड में। – Sichbo

+0

.NET 4.5 को चीजों को तोड़ना क्यों है। :( – tofutim

+1

मुझे वास्तव में लगता है कि यह आरटीएम में तय है। –

4

मैं आपके साथ ईमानदार रहूंगा, पॉल। मैं क्लिकऑन के साथ वास्तव में रोमांचित नहीं हुआ हूं। टूलसेट मैन्युअल प्रकाशन/तैनाती पक्ष के अलावा वास्तव में परिपक्व नहीं लग रहा है। एमएसबिल्ड के माध्यम से सामान चलाना कभी अच्छा अनुभव नहीं रहा है और Mage.exe हमेशा मेरे लिए समस्याएं प्रतीत होता है। अधिकांश समय, मेरी समस्याएं संस्करण संख्या के चारों ओर घूमती हैं जो सही ढंग से सेट नहीं की जा रही हैं।

उसने कहा, मुझे लगता है कि हमारी सबसे बड़ी समस्या विजुअल स्टूडियो में सेटिंग यूआई के माध्यम से चीजों को प्रबंधित करने की कोशिश करने से आई है। एमएसबिल्ड "जादू" पर थोड़ा सा भरोसा करने और एमएसबिल्ड में आवश्यक पैरामीटर को पार करने और सीस्पोज़ फ़ाइल के अंदर थोड़ा अधिक नियंत्रण लेने के लिए मेरे लिए मददगार रहा है।

मुझे नहीं पता कि आपका निर्माण सेटअप कैसा दिखता है, लेकिन हमारे लिए, हमारे पास JenkinsRake फ़ाइल चलाता है जो समाधान पर MSBuild को आमंत्रित करता है। यह हमें रेस फ़ाइल से एमएसबिल्ड में विशिष्ट पैरामीटर भेजने की अनुमति देता है।

विशेष रूप से, हम ApplicationVersion, ApplicationRevision, MinimumRequiredVersion, और OutDir के मानों में धक्का देते हैं। जहां तक ​​चीजें सीस्पोज़ में स्वयं को देखने के लिए, आप यह सुनिश्चित करना चाहते हैं कि ManifestCertificateThumbprint, ManifestKeyFile, GenerateManifests और SignManifests सेट हैं। हमने डिफॉल्ट बिल्ड लक्ष्य को Publish पर भी सेट किया है, लेकिन मुझे यकीन नहीं है कि यह सब प्रासंगिक है।

मैं बात नहीं कर सकता कि ClickOnce आपके निष्पादन योग्य को "डी-हस्ताक्षर" क्यों कर सकता है, शायद आप जिस निष्पादन योग्य पर हस्ताक्षर कर रहे हैं, वह हो सकता है कि आप क्लिकऑन पैकेज में पैक नहीं हो रहे हैं। दूसरे शब्दों में, यह एक नया निष्पादन योग्य बना सकता है और उस पैकेज के बजाय उस पैकेज में फेंक रहा है जिसे आपने पहले ही हस्ताक्षर कर लिया है। मुझे लगता है कि निश्चित रूप से कॉल करने के लिए मुझे आपके सेटअप के बारे में कुछ और जानना होगा।

इसके लायक होने के लिए, अगर मैं इसे फिर से कर सकता, तो मैं अपने अंडों को क्लिकऑन टोकरी में नहीं डालूंगा। यह इंटरनेट   एक्सप्लोरर चलाने वाले लोगों के लिए वास्तव में केवल एक शानदार अनुभव है या यदि आपने क्रोम के लिए प्लगइन स्थापित किया है। यह अधिक काम है, लेकिन मैं वर्तमान में ऐसे समाधान पर काम कर रहा हूं जो क्रोम अपडेट की कहानी की नकल करता है। उनके पास इंटरनेट   एक्सप्लोरर उपयोगकर्ताओं के लिए एक क्लिकऑन पैकेज है, लेकिन यह वास्तव में केवल Windows इंस्टालर पैकेज डाउनलोड करने के लिए उपयोग किया जाता है जो Chrome.exe और Update.exe को स्थापित करता है। वे ओमाहा के लिए the technical documentation में अन्य विवरणों में जाते हैं (अन्यथा Google अपडेट के रूप में जाना जाता है)।

+0

यह एक लाल हेरिंग हो सकता है, लेकिन मुझे अभी एहसास हुआ कि जब क्लिकऑन मशीन पर स्थापित नेट 4.5 के साथ हमारे एप्लिकेशन को स्थापित करता है तो यह कहता है कि प्रकाशक अज्ञात है। 4.5 के बिना मशीन पर प्रकाशक सही है। यह 4.5 क्लिकऑन इंस्टॉलर में एक बग हो सकता है। – dustyburwell

+0

ओह मुझे पता है, http://github.com/xpaulbetts/nsync –

+0

nsync https://github.com पर ले जाया गया है/github/shimmer ऐसा लगता है। –

-1

setup.exe पर हस्ताक्षर करने में कोई समस्या है। एमएसएफटी में पी & पी लोगों के लिए क्लिकऑन लेख लिखते समय मैं इसमें भाग गया। इसके लिए कोई कामकाज नहीं है।

क्या आपका प्रमाणपत्र उस उपयोगकर्ता खाते के लिए प्रमाणपत्र स्टोर में स्थापित है जिसका उपयोग आप तैनाती उत्पन्न करने के लिए कर रहे हैं? क्या यह वीएस समाधान में फ़ाइल के रूप में निर्दिष्ट है? यदि यह डिफ़ॉल्ट है, और आप msbuild और mage का उपयोग करके तैनाती उत्पन्न करते हैं, तो क्या यह ठीक से साइन आउट हो जाता है?

7

यहां मैनिफेस्ट पर हस्ताक्षर करने और exe पर हस्ताक्षर करने का तरीका है। मैं इसे अपने .csproj फ़ाइल के नीचे जोड़ता हूं (इसे एक टेक्स्ट एडिटर में संपादित करें)।

<Target Name="AfterBuild"> 
    <CallTarget Targets="SignOutput" /> 
    </Target> 
    <Target Name="SignOutput"> 
    <PropertyGroup> 
     <TsUrl>http://timestamp.comodoca.com/rfc3161</TsUrl> 
    </PropertyGroup> 
    <ItemGroup> 
     <SignableFiles Include="$(ProjectDir)obj\$(ConfigurationName)\myappname.exe" /> 
    </ItemGroup> 
    <Exec Command="signtool.exe sign /n &quot;My Company Name LLC&quot; /tr $(TsUrl) &quot;%(SignableFiles.Identity)&quot;" /> 
    </Target> 

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

  • कोई संबंधित समस्या नहीं^_^