簡體   English   中英

如何確定是否正在從 zip 文件運行 C# 可執行文件?

[英]How to determine if C# executable is being run from zip file?

我試圖確保我的 C# .NET Core 程序的用戶總是在運行之前解壓縮它,但是,我似乎找不到一個好的解決方案。

我嘗試使用Assembly.GetExecutingAssembly().Location並檢查它是否包含Temp但它沒有按預期工作。 我的理解是,在壓縮文件中運行可執行文件時,Windows 將自動解壓縮 (?) 到臨時目錄,然后繼續。

關於如何去做這件事的任何想法?

謝謝!

一種解決方案可能是您將另一個文件放在 zip 文件中的 exe 文件旁邊,並在 exe 的同一位置找到該文件的 exe。

當從 zip 中執行 exe 時,解壓縮程序將解壓縮 exe 而不是其他文件,並檢查此文件,您可以測試是否只是 exe 被解壓縮,或者整個文件是否已解壓縮並猜測它是否已安裝。

(無論如何,我同意 Ian Kemp 的觀點,因為這似乎是一個 XY 問題)。

我可以想到兩種在許多情況下都有效的檢查。 顯然,這些檢查不是防彈的。

  1. 大多數.zip查看器會將單擊的.exe壓縮到一個臨時文件夾中。
  2. Windows 資源管理器 zip 文件夾視圖從臨時文件夾運行.exe設置ReadOnly屬性。

示例應用程序

using System;
using System.IO;

namespace SimpleApp
{
    class Program
    {
        private static bool IsLikelyRunFromZipFolder()
        {
            var path = System.Reflection.Assembly.GetEntryAssembly().Location;
            var fileInfo = new FileInfo(path);
            return fileInfo.Attributes.HasFlag(FileAttributes.ReadOnly);
        }

        private static bool IsRunFromTempFolder()
        {
            var path = System.Reflection.Assembly.GetEntryAssembly().Location;
            var temp = Path.GetTempPath();
            return path.IndexOf(temp, StringComparison.OrdinalIgnoreCase) == 0;
        }

        static void Main(string[] args)
        {
            var isTemp = IsRunFromTempFolder();
            var isZip = IsLikelyRunFromZipFolder();
            
            Console.WriteLine($"Run from TEMP folder? {isTemp}");
            Console.WriteLine($"LIKELY run from Windows Explorer ZIP folder? {isZip}");
            
            Console.ReadKey();
        }
    }
}

我不同意這個線程中的懷疑論者。 從 Windows 資源管理器中的“zip 文件夾”運行exe確實是一個常見的錯誤來源。 通過顯示警告,沒有經驗的用戶可以立即獲得一些建議。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM