15

我写了一个从互联网下载文件的小软件,仅此而已。我的意图是通过命令行使用它......它工作得很好,但是当我将它放在 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);
    }
}
4

5 回答 5

20

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

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

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

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

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

于 2013-08-13T21:26:42.990 回答
2

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

于 2014-08-06T00:45:35.027 回答
2

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

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

于 2015-02-19T10:28:40.227 回答
0

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

于 2017-08-04T12:01:51.713 回答
0

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

在那之后,我的程序完美运行。

于 2020-10-22T08:16:07.820 回答