Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何确定C#可执行文件是否正在从zip文件运行?_C#_.net Core_Unzip - Fatal编程技术网

如何确定C#可执行文件是否正在从zip文件运行?

如何确定C#可执行文件是否正在从zip文件运行?,c#,.net-core,unzip,C#,.net Core,Unzip,我试图确保我的C#.NET核心程序的用户总是在运行之前解压缩它,然而,我似乎找不到一个好的解决方案 我尝试使用Assembly.getExecutionGassembly().Location并检查它是否包含Temp,但它没有按预期工作。我的理解是,当在压缩文件中运行可执行文件时,Windows将自动解压缩(?)到临时目录,然后继续 关于如何着手做这件事有什么想法吗 谢谢 一种解决方案可能是将exe文件旁边的另一个文件放在zip文件中,并使该文件的exe位于exe的相同位置 当从zip内部执行e

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


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

关于如何着手做这件事有什么想法吗


谢谢

一种解决方案可能是将exe文件旁边的另一个文件放在zip文件中,并使该文件的exe位于exe的相同位置

当从zip内部执行exe时,解压程序将解压exe,但不会解压另一个文件。检查此文件,您可以测试是否仅解压了exe,或者解压的整个文件是否已解压,以及是否安装了它


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

一个解决方案可能是,在zip文件中的exe文件旁边放置另一个文件,并使该文件的exe位于exe的相同位置

当从zip内部执行exe时,解压程序将解压exe,但不会解压另一个文件。检查此文件,您可以测试是否仅解压了exe,或者解压的整个文件是否已解压,以及是否安装了它


(无论如何,我同意伊恩·坎普的观点,因为这似乎是一个XY问题)

我可以想出两种在许多情况下都有效的检查方法。显然,这些检查不是防弹的

  • 大多数
    .zip
    查看器将在临时文件夹中提取单击的
    .exe
  • Windows资源管理器zip文件夹视图从临时文件夹运行
    .exe
    ,并设置
    只读属性
  • 示例应用程序
    使用系统;
    使用System.IO;
    名称空间SimpleApp
    {
    班级计划
    {
    私有静态bool IsLikelyRunFromZipFolder()
    {
    var path=System.Reflection.Assembly.GetEntryAssembly().Location;
    var fileInfo=新文件信息(路径);
    返回fileInfo.Attributes.HasFlag(FileAttributes.ReadOnly);
    }
    私有静态bool IsRunFromTempFolder()
    {
    var path=System.Reflection.Assembly.GetEntryAssembly().Location;
    var temp=Path.GetTempPath();
    返回路径IndexOf(temp,StringComparison.OrdinalIgnoreCase)=0;
    }
    静态void Main(字符串[]参数)
    {
    var isTemp=IsRunFromTempFolder();
    var isZip=IsLikelyRunFromZipFolder();
    WriteLine($“从临时文件夹运行?{isTemp}”);
    Console.WriteLine($“可能从Windows资源管理器ZIP文件夹运行?{isZip}”);
    Console.ReadKey();
    }
    }
    }
    

    我不同意怀疑论者的观点。从Windows资源管理器中的“zip文件夹”运行
    exe
    ,确实是常见的错误源。通过显示警告,没有经验的用户可以立即得到一些建议。

    我可以想出两种检查方法,在许多情况下都有效。显然,这些检查不是防弹的

  • 大多数
    .zip
    查看器将在临时文件夹中提取单击的
    .exe
  • Windows资源管理器zip文件夹视图从临时文件夹运行
    .exe
    ,并设置
    只读属性
  • 示例应用程序
    使用系统;
    使用System.IO;
    名称空间SimpleApp
    {
    班级计划
    {
    私有静态bool IsLikelyRunFromZipFolder()
    {
    var path=System.Reflection.Assembly.GetEntryAssembly().Location;
    var fileInfo=新文件信息(路径);
    返回fileInfo.Attributes.HasFlag(FileAttributes.ReadOnly);
    }
    私有静态bool IsRunFromTempFolder()
    {
    var path=System.Reflection.Assembly.GetEntryAssembly().Location;
    var temp=Path.GetTempPath();
    返回路径IndexOf(temp,StringComparison.OrdinalIgnoreCase)=0;
    }
    静态void Main(字符串[]参数)
    {
    var isTemp=IsRunFromTempFolder();
    var isZip=IsLikelyRunFromZipFolder();
    WriteLine($“从临时文件夹运行?{isTemp}”);
    Console.WriteLine($“可能从Windows资源管理器ZIP文件夹运行?{isZip}”);
    Console.ReadKey();
    }
    }
    }
    

    我不同意怀疑论者的观点。从Windows资源管理器中的“zip文件夹”运行
    exe
    ,确实是常见的错误源。通过显示警告,没有经验的用户可以立即得到一些建议。

    Assembly.GetExecutionGassembly().Location的值是什么?“但它没有按预期工作”-你能说得更具体些吗?“我试图确保我的C#.NET核心程序的用户总是在运行“为什么?”?这似乎是一个XY问题。
    Assembly.getExecutionGassembly().Location
    值看起来像什么?“但它没有按预期的那样工作”-你能说得更具体些吗?“我试图确保我的C#.NET核心程序的用户总是在运行之前解压缩它”为什么?这似乎是一个XY问题。