[英]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 問題)。
我可以想到兩種在許多情況下都有效的檢查。 顯然,這些檢查不是防彈的。
.zip
查看器會將單擊的.exe
壓縮到一個臨時文件夾中。.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.