2009-04-20 13 views
7

के साथ काम करने के लिए 64 बिट ऑपरेटिंग सिस्टम के लिए 32 बिट डीएल रैप करें हम वर्तमान में विंडोज 2003 (32-बिट) से विंडोज 2008 (64-बिट) में हमारी वेबसाइटों को स्थानांतरित कर रहे हैं और एक समस्या आई है।regsvr32.exe

हमारी वेबसाइट में से एक भुगतान गेटवे एचएसबीसी सीपीआई का उपयोग करती है जिसके लिए एक डीएलएल पंजीकृत होना आवश्यक है (regsvr32.exe), यह डीएलएल तब क्लासिक एएसपी वेबसाइट के अंदर उपयोग किया जाता है। समस्या यह है कि डीएलएल 32-बिट डीएलएल है और इसलिए यह विंडोज 2008 ऑपरेटिंग सिस्टम के साथ पंजीकृत नहीं होगा।

क्या कोई तरीका है कि हम इस 32 बिट डीएल को सी # नेट परियोजना में लपेट सकते हैं ताकि यह विधियों का खुलासा हो और ओएस के साथ पंजीकृत किया जा सके?

किसी भी मदद की बहुत सराहना की जाएगी।

उत्तर

5

आप डीएलएल को regsvr32.exe से C: \ Windows \ SysWOW64 फ़ोल्डर से पंजीकृत कर सकते हैं।

हालांकि आप 64/32 बिट कोड मिश्रण नहीं कर सकते हैं, इसलिए आपको x86 में चलने वाली सी # सेवा बनाना होगा (प्रोजेक्ट गुण, प्लेटफार्म लक्ष्य देखें) जिसे आप अपने एक्स 64 वेब ऐप से डब्ल्यूसीएफ के माध्यम से उपयोग कर सकते हैं।

एक आसान विकल्प एचएसबीसी को x64 डीएल के लिए पूछना होगा।

+0

धन्यवाद क्रिस यह काम करता है। दुर्भाग्यवश एचएसबीसी 64 बिट ऑपरेटिंग सिस्टम का समर्थन नहीं करता है। –

2

हमने एचएसबीसी सीपीआई इंटरफेस के साथ एक ही समस्या को मारा।

एचएसबीसी एक नेट रैपर की आपूर्ति नहीं करता है, और COM wrapper को 64 बिट ऐप से नहीं कहा जा सकता है।

यह 64 सर्वर (जो शायद 25% नए उत्पादन सर्वर को कवर करता है) से इसे तैनात करता है व्यावहारिक रूप से असंभव।

हमने सूचीबद्ध कुछ दृष्टिकोणों को देखा, लेकिन वे बहुत सारे काम की तरह लग रहे थे। के आस-पास गड़बड़ी के बाद अंत में हमारे अपने कार्यान्वयन के साथ आया, जो जैसा कुछ दिखता है।

आप 32-बिट COM dll रजिस्टर करने के लिए चाहते हैं, तो निम्नलिखित जावा कोड का उपयोग करें मध्यवर्ती हैश

import java.io.Console; 
import java.lang.*; 
import java.util.*; 
import com.clearcommerce.CpiTools.security.HashGenerator; 
import com.clearcommerce.CpiTools.security.SecCrypto; 
import javax.xml.bind.annotation.adapters.HexBinaryAdapter; 
import java.io.ByteArrayOutputStream; 
import java.io.IOException; 
import java.security.GeneralSecurityException; 
import java.util.Vector; 
import javax.crypto.Mac; 
import javax.crypto.spec.SecretKeySpec; 

public class Extract { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     try 
     { 
      String encryptedKey = "<YOUR SECRET KEY HERE>"; 
      if (args.length == 1) 
       encryptedKey = args[0]; 

      HexBinaryAdapter hb = new HexBinaryAdapter(); 
      SecCrypto sc = new SecCrypto(); 

      byte abyte0[] = sc.decryptToBinary(encryptedKey); 
      System.out.println("New Secret Base64 Encoded : " + new String(Base64Coder.encode(abyte0))); 
      System.out.println("New Secret Hex Encoded : " + hb.marshal(abyte0)); 
      return; 
     } 
     catch(Exception ex) 
     { 
      System.out.println("Error:" + ex.getMessage()); 
     } 
    } 
} 

पाने के लिए फिर हैश calcualte को

using System; 
using System.Collections.Generic; 
using System.Text; 

namespace HsbcIntergration 
{ 
    internal static class CpiHashing 
    { 
     <USE THE VALUE RETURNED FROM THE JAVA CODE HERE> 
     private static readonly byte[] _secret = new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; 

     public static string ComputeHash(List<string> inputList) 
     { 
      return ComputeHash(inputList, _secret); 
     } 

     public static string ComputeHash(List<string> inputList, byte[] secretData) 
     { 
      List<string> orderedDataToHash = new List<string>(inputList); 
      orderedDataToHash.Sort(StringComparer.Ordinal); 

      StringBuilder sb = new StringBuilder(); 
      foreach (string s in orderedDataToHash) 
       sb.Append(s); 

      List<byte> dataToHash = new List<byte>(); 
      dataToHash.AddRange(Encoding.ASCII.GetBytes(sb.ToString())); 
      dataToHash.AddRange(secretData); 

      System.Security.Cryptography.HMAC sha = System.Security.Cryptography.HMACSHA1.Create(); 
      sha.Key = secretData; 
      return Convert.ToBase64String(sha.ComputeHash(dataToHash.ToArray(), 0, dataToHash.Count)); 
     } 
    } 
} 
5

निम्नलिखित .net कोड का उपयोग वीसी ++ या विजुअल बेसिक 6.0 का उपयोग करके बनाया गया है, तो आपको कोड में कोई भी बदलाव किए बिना नीचे दिए गए चरणों का पालन करना होगा। इसे किसी भी संकलन की आवश्यकता नहीं होती है और आपको वाह मोड में आईआईएस चलाने की भी आवश्यकता नहीं है। मैंने कुछ साल पहले इस मुद्दे का सामना किया है और मैंने इस मुद्दे को हल किया है और यह मेरे लिए ठीक काम करता है।

परिदृश्य:

मुझे मान आप एक 3 पार्टी 32-बिट कॉम एक विक्रेता द्वारा प्रदान DLL है कि करते हैं। डीएलएल 32 बिट ऑपरेटिंग सिस्टम पर ठीक काम करता है और जिस क्षण आप x64 वातावरण में जाते हैं, यह काम नहीं करता है भले ही आपने regsv32 के माध्यम से इसे पंजीकृत करने का प्रयास किया हो।

मुझे यह भी मानना ​​है कि डीएलएल का नाम "ASXUpload.DLL" है। मैं इस नाम का समाधान उस समाधान में करूँगा जो मैं नीचे प्रदान कर रहा हूं।

समाधान

कृपया नीचे दिए गए चरणों का पालन करें:

सभी की
  1. पहले अगर आप पहले से DLL 64 ऑपरेटिंग सिस्टम में अपंजीकृत DLL पंजीकृत किया है। ऐसा करने के लिए बस "regsvr32/u" रन कमांड में निम्न टाइप करें जैसे "regsvr32/u C: \ MyDLL \ ASXUpload.DLL"। यदि आपने पहले ही x64 ओएस से डीएलएल को अनियंत्रित कर दिया है तो इस चरण को चलाने की आवश्यकता नहीं है।

  2. यह भी सुनिश्चित करें कि आपने अपने DLL को Windows फ़ोल्डर के अंदर नहीं रखा है जो सामान्यतः C: \ Windows है। इस उदाहरण के लिए मैंने डीएलएल को निम्न फ़ोल्डर सी: \ MyDLL में रखा है।

  3. अब हमें माइक्रोसॉफ्ट की घटक सेवाओं का उपयोग कर COM + घटक जोड़ना होगा। घटक सेवा शुरू करने के लिए, नियंत्रण कक्ष/व्यवस्थापकीय उपकरण/घटक सेवा पर जाएं। एक बार घटक सेवाओं के अंदर, कंप्यूटर में ड्रिल करें, फिर मेरा कंप्यूटर, फिर COM + अनुप्रयोग। फिर COM + अनुप्रयोगों पर राइट-क्लिक करें और "नया" -> "एप्लिकेशन" चुनें।

  4. "COM अनुप्रयोग इंस्टॉल विज़ार्ड में आपका स्वागत है" स्क्रीन पर, "अगला>" पर क्लिक करें।

  5. "एक खाली एप्लिकेशन बनाएं" बटन पर क्लिक करें।

  6. नाम दर्ज करें। चूंकि मेरा डीएलएल नाम ASXUpload.dll है इसलिए मैंने नाम को "ASXUpload" के रूप में टाइप किया है। जब "लाइब्रेरी या सर्वर" पूछा जाता है, तो "सर्वर" का चयन करें।

  7. "अगला>" बटन क्लिक करें और फिर "यह उपयोगकर्ता" चुनें।

  8. उपयोगकर्ता दर्ज करें या उपयोगकर्ता का चयन करने के लिए ब्राउज़ करें क्लिक करें। ब्राउजिंग पर क्लिक करना सुरक्षित है, यह सुनिश्चित करने के लिए कि सही डोमेन और वर्तनी का उपयोग किया जाता है। पासवर्ड दर्ज करें और पासवर्ड की पुष्टि करें। चेतावनी, यदि आवश्यक हो तो डोमेन/उपयोगकर्ता नाम शामिल करना सुनिश्चित करें। "समाप्त करें" पर क्लिक करें। (नोट: हम "इस उपयोगकर्ता" की अनुशंसा करते हैं, अन्यथा, डीएलएल चलाने के लिए किसी को सर्वर पर लॉग ऑन होना चाहिए।)। मेरे मामले में मैंने डोमेन व्यवस्थापक खाता चुना है। आप एक सेवा खाता भी जोड़ सकते हैं। यदि आप सुनिश्चित नहीं हैं तो कृपया अपने सिस्टम व्यवस्थापक से परामर्श लें।

  9. अब "एप्लिकेशन भूमिकाएं जोड़ें" स्क्रीन दिखाई देगी। कुछ भी न जोड़ें बस "अगला>" बटन पर क्लिक करें।

  10. अब "रोल में उपयोगकर्ता जोड़ें" स्क्रीन दिखाई देती है। कुछ भी न जोड़ें बस "अगला>" बटन पर क्लिक करें।

  11. अब आप देखेंगे कि घटक सेवा -> कंप्यूटर -> मेरा कंप्यूटर -> COM + एप्लिकेशन -> आप नए जोड़े गए एप्लिकेशन को देखेंगे। इस उदाहरण में एप्लिकेशन का नाम "ASXUpload" होगा। अब "+" आइकन पर क्लिक करके नए जोड़े गए एप्लिकेशन "ASXUpload" को ड्रिल करें और आप "घटक" देखेंगे।

  12. अब "घटक" पर राइट-क्लिक करें और फिर "नया घटक" चुनें। "COM अनुप्रयोग इंस्टॉल विज़ार्ड में आपका स्वागत है" स्क्रीन पर, "अगला>" पर क्लिक करें।

  13. "नए घटक स्थापित करें" पर क्लिक करें और अब डीएलएल चुनें जिसे आप रजिस्टर करना चाहते हैं। मामले में यह "सी: \ MyDLL \ ASXUpload.DLL" होगा।

  14. एक बार जब आप डीएलएल चुनते हैं तो आप देखेंगे कि यह आपको घटक दिखाएगा। आगे बढ़ने के लिए "अगला>" बटन पर क्लिक करें और अंत में पूरा करने के लिए "समाप्त करें" बटन दबाएं।

  15. अब मुश्किल हिस्सा है। आपके द्वारा जोड़े गए एप्लिकेशन पर राइट क्लिक करें जो आपको घटक सेवा -> कंप्यूटर -> मेरा कंप्यूटर -> COM + एप्लिकेशन के अंतर्गत मिलेगा। मेरे मामले में एप्लिकेशन का नाम "ASXUpload" है। एप्लिकेशन पर राइट क्लिक करने के बाद "Properties" चुनें। एप्लिकेशन गुण विंडो खुल जाएगी। सुरक्षा टैब पर क्लिक करें। सुरक्षा टैब में सुनिश्चित करें कि "प्राधिकरण" अनुभाग के अंतर्गत चेकबॉक्स "इस एप्लिकेशन के लिए एक्सेस चेक लागू करें" अनचेक किया गया है।

"सुरक्षा स्तर" अनुभाग के तहत रेडियो बटन का चयन करें "प्रक्रिया स्तर पर केवल एक्सेस चेक करें। सुरक्षा संपत्ति वस्तु संदर्भ पर शामिल नहीं किया जाएगा। COM + सुरक्षा कॉल संदर्भ उपलब्ध नहीं होगा। "

सुनिश्चित करें कि विकल्प" प्रतिबंध नीति लागू करें "अनचेक किया गया है।

सेट "का रूप धारण स्तर" करने के लिए "बेनामी"

  1. आप तो सुनिश्चित करें कि आप IUSR और IWAM खाता जोड़ने बनाने के वेब अनुप्रयोग से DLL का उपयोग करना चाहते हैं। ऐसा करने के लिए COM + एप्लिकेशन पर जाएं -> एप्लिकेशन का नाम (इस मामले में यह ASXUpload होगा) -> भूमिकाएं -> CreateOwner -> उपयोगकर्ता। उपयोगकर्ताओं पर राइट क्लिक करें और इंटरनेट सूचना सर्वर द्वारा उपयोग किए गए IUSR और IWAM खाते को जोड़ें।

  2. उस फ़ोल्डर पर एनटीएफएस अनुमति भी सेट करें जहां आपने डीएलएल रखा था। इस मामले में मैंने डीएलएल को फ़ोल्डर सी: \ MyDLL के अंदर रखा है। अब "MyDLL" फ़ोल्डर पर राइट क्लिक करें और सुरक्षा टैब पर जाएं और फिर IUSR और IWAM खाते जोड़ें।

यह सब आपको करने की ज़रूरत है और आपको डीएलएल का उपभोग करने में सक्षम होना चाहिए।

मैंने इस तकनीक का उपयोग दो अलग-अलग संगठनों में दो बार किया है, मैंने उत्पादन पर्यावरण पर अतीत में काम किया है और यह बिना किसी समस्या के काम करता है। सबसे पहले मैंने इसे वर्ष 2005 में आजमाया और फिर मैंने इसे 2008 में फिर से इस्तेमाल किया।

मुझे बताएं कि क्या आपको किसी भी समस्या का सामना करना पड़ रहा है।