2012-04-11 19 views
14

के बजाय SysWOW64 पर कॉपी हो रहा है फ़ाइल को मेरे अनुप्रयोग चलाने पर सिस्टम 32 फ़ोल्डर में एक psTool उपयोगिता की प्रतिलिपि बनाना है।
मैं 64 बिट विंडोज 7 पर हूं और जब भी, मैं exe को सिस्टम 32 बिट फ़ोल्डर में File.Copy के माध्यम से कॉपी करने का प्रयास करता हूं, तो exe हमेशा इसके बजाय SysWow64 पर कॉपी हो जाता है।सिस्टम 32

जब मैं destFile पर ब्रेकपॉइंट डालता हूं, तो पथ C:\Windows\System32 के रूप में दिखाया जाता है लेकिन फ़ाइल वहां नहीं जाती है (sysWow64 पर जाती है)। मैंने Special FolderSystemX86 को आजमाया है, लेकिन फ़ाइल फिर से sysWOW64 पर जाती है।

string sourceFile = "C:\bin\Debug\somexe.exe" 
string destFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), utilityName); 
File.Copy(sourceFile, destFile, true); 

कोई सुझाव जो मैं यहां याद कर रहा हूं?

संपादित

के रूप में इस सवाल का जवाब में नीचे ने कहा, वहाँ फाइल सिस्टम पुनर्निर्देशन जगह ले जा रहा। मैं एक 64 बिट ओएस पर एक कंसोल अनुप्रयोग के लिए विजुअल स्टूडियो की डिफ़ॉल्ट सेटिंग्स के साथ ऐप विकसित कर रहा हूं। मुझे यकीन नहीं है कि संकलन करते समय किन सेटिंग्स/स्विच रखना होगा, ताकि एप्लिकेशन 32 बिट और 64 बिट ओएस दोनों पर काम करे।
असल में, इसे फ़ाइल को केवल System32 पर कॉपी करना चाहिए, चाहे वह कितना बिट ओएस है।
बाद में कार्यक्रम में, मुझे कमांड लाइन के माध्यम से psTools उपयोगिता तक पहुंचनी है जो उपलब्ध नहीं है अगर मैं इसे SysWOW64 में रखता हूं। यदि मैं SysWOW64 के 32 बिट cmd.exe का उपयोग करने के लिए परिवर्तन करता हूं, तो यह फिर से 64 बिट प्लेटफार्म विशिष्ट होगा, जिसे मैं चुनना नहीं चाहता हूं।

कोई समाधान जो बिना किसी समस्या के 32-बिट और 64 बिट पर चल रहा हो सकता है? क्या मुझे कोड (कैसे?) संशोधित करना है या क्या मुझे इस कंसोल एप्लिकेशन प्रोजेक्ट (कौन से गुण) के कुछ गुणों को संशोधित करना है?

+1

आप इसे पहली बार सिस्टम 32 से क्यों कॉपी कर रहे हैं, PsTools suite का कौन सा टूल आप चलाने की कोशिश कर रहे हैं? –

+0

इसे 'system32' पर कॉपी करें, इसे कॉपी न करें। 'पस्किल' उपयोगिता का नाम है। – user1240679

+1

आपने मुझे टाइपो से/प्राप्त किया। हालांकि, आपने अभी भी प्रश्न का उत्तर नहीं दिया है ** क्यों ** आप कहीं और जगह से इसे चलाने के बजाय 'system32' फ़ोल्डर में' pskill' की प्रतिलिपि बना रहे हैं (और यदि आवश्यक हो तो इसे सिस्टम 'पथ' चर में जोड़ें) –

उत्तर

22

आपने file system redirection से पहले भाग लिया है।

क्योंकि %windir%\System32 Windows के 64-बिट संस्करण पर, 64-बिट अनुप्रयोगों के लिए विशेष रूप से आरक्षित है, 32-बिट अनुप्रयोगों कि %windir%\System32 निर्देशिका का उपयोग करने का प्रयास स्वचालित रूप से और पारदर्शी 32-बिट %windir%\SysWOW64 निर्देशिका के लिए पुनः निर्देशित कर रहे हैं।

सबसे पहले, सुनिश्चित करें कि आपका प्रोग्राम वास्तव में 64-बिट सिस्टम फ़ोल्डर में संबंधित है। विंडोज एक कारण के लिए यह स्वचालित पुनर्निर्देशन करता है। 32-बिट सामग्री %windir%\System32 फ़ोल्डर में Windows के 64-बिट संस्करणों पर नहीं जाती है।

यदि आप निश्चित हैं कि आप 64-बिट सिस्टम निर्देशिका में सामान कॉपी करना चाहते हैं, तो आपके पास कुछ विकल्प हैं। संभवतः 64-बिट एप्लिकेशन के रूप में अपनी उपयोगिता को संकलित करना सबसे आसान है। वैकल्पिक रूप से, आप WOW64 पुनर्निर्देशक को बता सकते हैं कि आप जानते हैं कि आप क्या कर रहे हैं और %windir%\System32 के बजाय %windir%\Sysnative का उपयोग कर पुनर्निर्देशन नहीं करना है। %windir%:

+0

मुझे यकीन नहीं है कि उपरोक्त कोड में उपरोक्त 'Sysnative' चीज़ कैसे करें। मैंने '% windir% \ Sysnative' खोलने के लिए' रन 'संवाद के माध्यम से प्रयास किया, लेकिन यह कोई निर्देशिका नहीं खोलता है। – user1240679

+1

@user: आपको ** 32-बिट एप्लिकेशन ** से निर्देशिका तक पहुंच प्राप्त करनी है। यह कहने के बिना जाना चाहिए कि विंडोज एक्सप्लोरर विंडोज के 64-बिट संस्करणों पर 32-बिट अनुप्रयोग नहीं है। शायद [इन निर्देशों] (http://ovidiupl.wordpress.com/2008/07/11/useful-wow64-file-system-trick/) सहायक होगा? –

+0

मैं समझता हूं कि यह पुनर्निर्देशन तब किया जाता है जब 32-बिट अनुप्रयोग 64 बिट पर System32 तक पहुंचने का प्रयास करता है। हालांकि, मैंने विकास के दौरान कुछ भी नहीं किया है जिसने मेरा आवेदन 32 बिट किया होगा। प्लेटफ़ॉर्म लक्ष्य को 'किसी भी CPU' पर भी सेट किया गया है। क्या एप्लिकेशन 64 बिट ओएस पर 32-बिट और 64 बिट ओएस पर 64 बिट के रूप में व्यवहार नहीं करता है, जिसे केवल 'System32' फ़ोल्डर तक पहुंचकर समस्या हल होनी चाहिए। हालांकि 64 बिट ओएस पर 64 बिट अनुप्रयोगों के लिए 'System32' के नामकरण के बारे में बहुत अजीब बात है। मैं अभी भी यह समझने में सक्षम नहीं हूं कि मुझे अपने आवेदन में कौन सा विशिष्ट परिवर्तन करना है। : -/ – user1240679

1

पथ environnement चर के रूप में c:\windows दोनों खिड़कियों 86/64 संस्करणों पर, क्यों c:\windows में अपने उपकरण डाल नहीं होता है?

मेरे मामले में यह मेरी समस्या का समाधान करता है।

5

मुझे एक ही समस्या थी। समाधान विजुअल स्टूडियो में प्रोजेक्ट गुणों में x86 के बजाय "प्लेटफ़ॉर्म लक्ष्य" को x64 या AnyCPU के रूप में सेट करना है।इस मामले में पथ "C:\Windows\system32" होगा और "C:\Windows\SysWOW64" पर रीडायरेक्ट नहीं करेगा आप किसी भी फ़ाइल को "सी: \ विंडोज \ SysWOW64" फ़ोल्डर में रखकर देख सकते हैं और फिर File.Exists कमांड का उपयोग यह जांचने के लिए करें कि उस फ़ोल्डर में फ़ाइल मिली है:

File.Exists(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), sFileName)); 

या

File.Exists(Path.Combine(Environment.SystemDirectory, sFileName)); 

enter image description here

2

मैं अपने 32-बिट एप्लिकेशन में एक सहायक की संपत्ति है कि हमेशा मूल system32 फ़ोल्डर लौटने का उपयोग करें। सहायक संपत्ति है:

public static string NativeSystemPath 
{ 
    get 
    { 
     if (Environment.Is64BitOperatingSystem) 
     { 
      return System.IO.Path.Combine(
       Environment.GetFolderPath(Environment.SpecialFolder.Windows), 
       "Sysnative"); 
     } 
     return Environment.GetFolderPath(Environment.SpecialFolder.System); 
    } 
} 
संबंधित मुद्दे