簡體   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