【问题标题】:How to determine if C# executable is being run from zip file?如何确定 C# 可执行文件是否正在从 zip 文件运行?
【发布时间】:2021-01-31 21:28:00
【问题描述】:

我试图确保我的 C# .NET Core 程序的用户总是在运行之前解压缩它,但是,我似乎找不到一个好的解决方案。

我尝试使用Assembly.GetExecutingAssembly().Location 并检查它是否包含Temp,但它没有按预期工作。我的理解是,在压缩文件中运行可执行文件时,Windows 会自动解压缩(?)到临时目录,然后继续。

关于如何进行此操作的任何想法?

谢谢!

【问题讨论】:

  • Assembly.GetExecutingAssembly().Location 值是什么样的?
  • “但它没有按预期工作” - 你能说得更具体些吗?
  • “我正在努力确保我的 C# .NET Core 程序的用户始终在运行前解压缩它”为什么?这似乎是一个 XY 问题。

标签: c# .net-core unzip


【解决方案1】:

一种解决方案可能是您将另一个文件放在 zip 文件中的 exe 文件旁边,并让 exe 在 exe 的同一位置找到该文件。

当从 zip 中执行 exe 时,解压缩程序将解压缩 exe 而不是其他文件,并检查此文件,您可以测试是否仅解压缩​​了 exe,或者是否解压缩了整个文件并猜测它已安装。

(无论如何,我同意 Ian Kemp,因为这似乎是一个 XY 问题)..

【讨论】:

    【解决方案2】:

    我可以想到两种检查方法,它们可以在许多 情况下使用。显然,这些检查并不是万无一失的。

    1. 大多数.zip查看者会将点击的.exe提取到一个临时文件夹中。
    2. Windows Explorer 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 确实是常见的错误来源。通过显示警告,没有经验的用户可以立即获得一些建议。

    【讨论】:

      猜你喜欢
      • 2015-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-25
      • 2021-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多