C# 程序(Winform 和 WPF)在启动文件夹中创建快捷方式时被视为病毒?
Posted
技术标签:
【中文标题】C# 程序(Winform 和 WPF)在启动文件夹中创建快捷方式时被视为病毒?【英文标题】:C# program (Winform and WPF) be treated as virus when create shortcut in startup folder? 【发布时间】:2021-08-08 14:43:27 【问题描述】:Windows Defender 通常将我的程序作为病毒隔离,现在我发现了其中一种情况:在启动文件夹中创建快捷方式。
我希望程序可以在电脑启动时自动启动,所以我在里面创建了一个快捷方式
%APPDATA%\Microsoft\Windows\Start Menu\Programs\StartUp
然后由于Behavior Win32/Persistence.A!ml
,Windows Defender 迅速隔离了该程序。
我不知道如何防止这种情况发生,我尝试编辑 AssemblyInfo.cs,似乎没有效果,并且 WPF 在此脚本中没有 GUID 代码。
我现在只能将程序文件夹加入白名单,但显然不能让用户放心,操作也很麻烦。
2021/5/21 更新
麻烦在于Windows Defender报告的不确定性:
Windows Defender 有时会处理它,有时不会。运行的时候可能会被查杀,之后再编译就什么都没有了。这使得它难以复制。
我在之前的应用程序中导入user32.dll引用了一些系统级的方法,但是新建一个Demo进行测试后,就可以正常工作了。
我也试过签名申请,两天后又被隔离了,现在举报变成***:Script/Wacatac.B!ml
?
不管怎样,我现在很困惑。也许我需要删除代码进行故障排除,但是很难调试,因为它被标记为病毒的时间不确定。
【问题讨论】:
一般来说,autoLaunch 配置是专门用于安装程序(而不是应用程序本身)的任务。已签名的应用程序(带有受信任的证书)可能会被防病毒软件列入白名单,也不会被阻止。 我怀疑启动文件夹中的快捷方式可以单独引起警报。 “这个脚本”到底在做什么?你能为我们准备minimal reproducible example吗?没有它,就没什么好谈的了:你的软件正在做一些破坏性的事情,而防御者会阻止它。 Related 关于超级用户的话题。 来自@invictusWarrior:尝试使用 RegistryKey 吗?快捷方式是以编程方式制作的,还是您用鼠标将其放在启动文件夹中? 【参考方案1】:在“解决方案资源管理器”中右键单击您的项目并选择“添加>新建项目>常规>清单”,然后您将在“app.manifest”的前几行中看到以下代码:
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- UAC Manifest Options
If you want to change the Windows User Account Control level replace the
requestedExecutionLevel node with one of the following.
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
Specifying requestedExecutionLevel element will disable file and registry virtualization.
Remove this element if your application requires this virtualization for backwards
compatibility.
-->
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
在这一行:
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
将level="asInvoker"
更改为level="requireAdministrator"
【讨论】:
以上是关于C# 程序(Winform 和 WPF)在启动文件夹中创建快捷方式时被视为病毒?的主要内容,如果未能解决你的问题,请参考以下文章
求教:C#中winform 并未使用任何图片,但报错”GDI+ 中发生一般性错误“
编写高质量代码改善C#程序的157个建议——建议87:区分WPF和WinForm的线程模型