繁体   English   中英

“无法启动此应用程序。” 仅当文件在 system32 目录中时

[英]“This application could not be started.” Only when the file is in system32 directory

我写了一个从互联网上下载文件的小软件,仅此而已。 我的意图是通过命令行使用它......它工作得很好,但是当我将它放在 C:\\Windows\\System32\\ 中以从我想要的任何地方实际使用它时,它现在不起作用......它没有' t 抛出异常...它只是向我显示此消息框 - 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);
    }
}

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

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

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

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

因此,要解决此问题,请取消选中 Prefer 32-bit 以便它尝试针对 64 位平台,...或者更好的是,将应用程序放在其他位置并将应用程序目录添加到您的环境路径变量中。 这样您仍然可以在任何地方访问您的应用程序 .exe,并且它不会污染您的 System32 文件夹,该文件夹无论如何只能用于 Windows 文件。

此答案可能不适用于 OP 的问题(无论如何都已解决),但可能适用于因搜索“无法启动此应用程序”和 System32 而最终到达此处的其他人。在我的情况下,我编写了一个屏幕保护程序C# 程序必须运行 32 位,解决方案是将其安装在 Windows 目录中,而不是 Windows\\System32。然后它在 32 位和 64 位系统上都可以正常工作。

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

这听起来可能很奇怪,但请尝试一下。 如果您将相同的 exe 放在两个文件夹中,它将在不进行任何修改的情况下启动。

我刚刚将 NuGet.exe 从 c:\\Windows\\System32 移动到 c:\\Windows 并且它可以工作。

也许此答案并不直接适用于 OP 答案,但可以肯定它已连接并且解决了我的问题。
在我公司的计算机上,我有几个文件夹,它们会自动与 OneDrive 同步。 这些文件被永久标记为“工作”,而不是“个人”。
每次我在同步的这些文件夹之间进行复制时,我都无法运行我开发的应用程序。 当我在同步文件夹之外创建一个新目录时,我能够将文件所有权更改为“个人”(见下文):
在此处输入图片说明

在那之后,我的程序运行良好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM