"Это приложение не может быть запущено". Только когда файл находится в каталоге system32

Я написал небольшую часть программного обеспечения, которое загружает файл из Интернета, то есть не более того. Мои намерения - использовать его через командную строку... Он отлично работает, но когда я помещаю его в C:\Windows\System32 \, чтобы использовать его везде, я хочу, чтобы он теперь не работал... Он не выдавал исключение... он просто показывает мне это сообщение - http://i.imgur.com/a7rlMgo.png, и если я нажму "Да", он откроет эту страницу в браузере - http://support.microsoft.com/kb/2715633/en-us

Что мне делать, чтобы заставить его работать?

Код, если он какой-либо пользы..:

private const string InsufficientParametersMessage = "Insufficient Parameters...";

private static string[] _arguments;

static void Main(string[] args)
{
    _arguments = args;

    TakeCommand();

    Environment.Exit(0);
}

private static void TakeCommand()
{
    if (_arguments.Length < 1)
    {
        Console.WriteLine(InsufficientParametersMessage);
    }
    else if (_arguments.Length == 1)
    {
        DownloadFile(_arguments[0]);
    }
    else if (_arguments.Length > 1)
    {
        DownloadFile(_arguments[0], _arguments[1]);
    }
}

private static void DownloadFile(string url)
{
    DownloadFile(url, Path.GetFileName(url));
}

private static void DownloadFile(string url, string localFileName)
{
    WebClient client = new WebClient();

    if (File.Exists(localFileName))
    {
        File.Delete(localFileName);
    }

    try
    {
        client.DownloadFile(url, localFileName);
        Console.WriteLine("Done...");
    }
    catch (Exception exception)
    {
        Console.WriteLine(exception.Message);
    }
}

Ответ 1

Краткий ответ: Снимите флажок "Предпочитаете 32-разрядный".

Длинный ответ: (не уверен на 100%, но здесь идет)

Предполагая, что у вас 64-разрядная машина, имейте в виду, что System32 - это папка, зарезервированная для использования 64-битных приложений, и хотя это может показаться странным, SysWOW64 содержит 32-разрядные библиотеки DLL и зарезервирован для 32-разрядных приложений. Как правило, 32-разрядные приложения, которые обращаются к System32, будут пересылать редиректор файловой системы в папку SysWOW64. Подробнее здесь.

Однако, когда ваше приложение (которое выполняется как 32-разрядный процесс) запускается в самой System32, перенаправитель, вероятно, ничего не делает, потому что он считает, что нет необходимости перенаправлять, поэтому ваше приложение работает вне System32, но не внутри него.

Чтобы решить эту проблему, снимите флажок Предпочитайте 32-разрядный бит, чтобы он попытался настроить таргетинг на 64-битную платформу... или еще лучше, поместите приложение в другое место и добавьте каталог приложения в переменную пути среды. Таким образом, вы все равно можете получить доступ к своему приложению .exe в любом месте и не будете загрязнять вашу папку System32, которая должна использоваться только для файлов Windows.

Ответ 2

Этот ответ может быть неприменим к проблеме OP (которая была решена в любом случае), но, возможно, для других, которые попадают сюда из-за поиска в "Это приложение не может быть запущено" и System32. В моем случае я написал программу скринсейверов на С#, которая должна была запускать 32-разрядную версию, и решение было установить ее в каталог Windows, а не Windows\System32. Затем он работает нормально как на 32, так и на 64-битных системах.

Ответ 3

Если вы поместите свой 32-разрядный exe в папку System32 и SysWOW64. Он работает отлично. Не одна, не другая, а обе папки.

Это может показаться странным, но попробуйте. Если вы поместите тот же exe в обе папки, он будет запущен без каких-либо изменений.

Ответ 4

Я только что переместил NuGet.exe из c:\Windows\System32 в c:\Windows и работает.