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