Вопрос по 64bit, windows, c#, .net – Файл копируется в SysWOW64 вместо System32

16

Я должен скопировать утилиту psTool в папку System32, когда мое приложение работает.
Я на 64-битной Windows 7 и всякий раз, когда я пытаюсь скопировать EXE в папку system32 bit черезFile.CopyEXE всегда копируется в SysWow64 вместо этого.

Когда я ставлю точку останова на destFile, путь отображается какC:\Windows\System32 но файл не входит туда (идет к sysWow64). Я попробовалSpecial Folder SystemX86, но файл снова переходит к sysWOW64.

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

Любые предложения, что мне здесь не хватает?

EDIT

Как указано ниже в ответе, происходит перенаправление файловой системы. Я занимаюсь разработкой приложения с настройками Visual Studio по умолчанию для консольного приложения в 64-разрядной ОС. Я не уверен, какие настройки / переключатели нужно сохранить при компиляции, чтобы приложение работало как на 32-битной, так и на 64-битной ОС.
По сути, он должен просто установить копию файла вSystem32 только независимо от того, какая битная ОС это.
Позже в программе я должен получить доступ к утилите psTools через командную строку, которая недоступна, если я помещу ее в SysWOW64. Если я внесу изменения, чтобы использовать 32-битный cmd.exe SysWOW64, это опять-таки будет чем-то конкретным для 64-битной платформы, что я не хочу выбирать.

Любое решение, при котором приложение может работать как на 32-битной, так и на 64-битной системе без проблем? Должен ли я изменить код (как?) Или мне нужно изменить некоторые свойства этого проекта консольного приложения (какие свойства)?

Почему вы сначала копируете его из system32, какой инструмент из набора PsTools вы пытаетесь запустить? Scott Chamberlain
Вы получили меня на опечатку. Тем не менее, вы все еще не ответили на вопросwhy ты копируешьpskill в кsystem32 папку вместо того, чтобы просто запустить его на месте откуда-то еще (и добавить его в системуPATH переменная при необходимости) Scott Chamberlain
Скопируйте это вsystem32, не копируя его из.pskill это название утилиты. user1240679
Лучшее и простое решение - поместить файл pskill.exe в такое место, которое не подвержено перенаправлению файловой системы, например в папку данных приложения. В любом случае приложения не должны записываться в системные папки. Harry Johnston

Ваш Ответ

4   ответа
2

Error: User Rate Limit Exceeded

public static string NativeSystemPath
{
    get
    {
        if (Environment.Is64BitOperatingSystem)
        {
            return System.IO.Path.Combine(
                Environment.GetFolderPath(Environment.SpecialFolder.Windows),
                "Sysnative");
        }
        ret,urn Environment.GetFolderPath(Environment.SpecialFolder.System);
    }
}
6

"C:\Windows\system32" и не будет перенаправлять на"C:\Windows\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

Как переменная окружения пути содержитc:\windows в обеих версиях Windows x86 / x64, почему бы не положить свой инструмент вc:\windows : %windir%?

В моем случае это решит мою проблему.

26

перенаправление файловой системы.

Так как%windir%\System32Error: User Rate Limit Exceeded%windir%\System32 каталог автоматически и прозрачно перенаправляется на 32-битный%windir%\SysWOW64 каталог.

Во-первых, убедитесь, что ваша программаactually does belong in the 64-bit system folderError: User Rate Limit Exceeded32-bit stuff does not go in the %windir%\System32 folder on 64-bit versions of Windows.

Error: User Rate Limit Exceeded%windir%\Sysnative вместо%windir%\System32.

Error: User Rate Limit ExceededSysnativeError: User Rate Limit ExceededrunError: User Rate Limit Exceeded%windir%\SysnativeError: User Rate Limit Exceeded user1240679
Error: User Rate Limit Exceeded32Error: User Rate Limit Exceededsystem32Error: User Rate Limit Exceeded user1240679
Error: User Rate Limit Exceeded32-bit applicationError: User Rate Limit Exceededthese instructionsError: User Rate Limit Exceeded
Error: User Rate Limit ExceededAny CPUError: User Rate Limit ExceededSystem32Error: User Rate Limit ExceededSystem32Error: User Rate Limit Exceeded user1240679
Error: User Rate Limit ExceededAny CPUError: User Rate Limit ExceededSysWOW64Error: User Rate Limit ExceededSystem32Error: User Rate Limit Exceeded

Похожие вопросы