“这个应用程序无法启动。”仅当文件位于system32目录中时

时间:2013-08-13 16:58:50

标签: c# 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);
    }
}

5 个答案:

答案 0 :(得分:15)

简答:取消选中“首选32位”。

长答案:(不是100%肯定,但这里有)

假设您有64位计算机,请记住System32是为64位应用程序使用而保留的文件夹,虽然看起来很奇怪,但SysWOW64包含32位dll并保留用于32位应用程序。通常,访问System32的32位应用程序将通过文件系统重定向器到SysWOW64文件夹。更多信息here

但是,当您的应用程序(以32位进程运行)在System32本身中运行时,重定向器可能不会执行任何操作,因为它认为不需要重定向,这就是您的应用程序在外部工作的原因System32但不在其中。

所以要解决这个问题,取消选中Prefer 32-bit以便它将尝试以64位平台为目标,或者更好,将应用程序放在别处并将应用程序目录添加到您的环境中路径变量。这样你仍然可以在任何地方访问你的应用程序.exe,它不会污染你的System32文件夹,它只能用于Windows文件。

答案 1 :(得分:2)

这个答案可能不适用于OP的问题(无论如何已经解决了),但也许对于那些由于搜索“此应用程序无法启动而在这里结束”的其他人而言。和System32。在我的情况下,我在C#中编写了一个必须运行32位的屏幕保护程序,解决方案是将其安装在Windows目录中,而不是Windows \ System32中。然后它在32位和64位系统上运行正常。

答案 2 :(得分:1)

如果您将32位exe放入 System32 SysWOW64 文件夹中。它工作得很好。不是一个,不是另一个,而是两个文件夹。

这可能听起来很奇怪,但试试吧。如果你在两个文件夹中放入相同的exe,它将启动而不做任何修改。

答案 3 :(得分:0)

I just moved the NuGet.exe from c:\Windows\System32 to c:\Windows and it works.

答案 4 :(得分:0)

也许这个答案并不直接适用于OP答案,但是可以确定它已连接并解决了我的问题。
在公司计算机上,我有几个文件夹,这些文件夹会自动与OneDrive同步。这些文件被永久标记为“工作”,而不是“个人”。
每次我在要同步的那些文件夹之间复制时,都无法运行自己开发的应用程序。 在同步文件夹之外创建新目录时,我可以将文件所有权更改为“个人”(请参见下文):
enter image description here

此后,我的程序运行完美。