某些内容正在删除控制台应用程序.为什么删除它?



我需要学习如何在 C# 程序中使用 SMO,所以我做的第一件事是启动一个新的控制台应用程序,然后开始输入基础知识。我决定让应用程序接受参数,以便我可以传入用户名、登录名等内容。当我处理它并构建它时,我打开了一个 PowerShell 窗口,我可以在其中调用应用程序、是否为其提供参数等。但是发生了一些我不明白的奇怪事情。有时,当我在PowerShell窗口中运行该应用程序时,由于某种原因,该应用程序会被删除。为什么要这样做?当它第一次给我以下错误消息时,我发现了它:

程序"SmoListLogins.exe"无法运行:系统找不到指定的文件在行:1 个字符:1 + .\SmoListLogins.exe "MYCOMPANY\Rod">

我的SmoListLogins.exe程序不存在。当然,我可以轻松地重新创建它,但我不明白为什么它被删除。

所以你可以看到我正在使用什么,这是源代码。我从MSDN文章中获取了它,并添加了一点:

using System;
using System.Data;
using Microsoft.SqlServer.Management.Smo;
namespace SmoListLogins
{
class Program
{
static void Main(string[] args)
{
if (args.Length > 0)
{
var userName = args[0];
ListLogins(userName);
}
else
{
ListLogins();
}
}
static private void ListLogins(string userName = "")
{
var userNamePassed = (userName != "");
Server srv = new Server("YOURSQLINSTANCE");
//Iterate through each database and display.   
foreach (Database db in srv.Databases)
{
Console.WriteLine("========");
Console.WriteLine("Login Mappings for the database: " + db.Name);
Console.WriteLine(" ");
//Run the EnumLoginMappings method and return details of database user-login mappings to a DataTable object variable.   
DataTable d;
try
{
d = db.EnumLoginMappings();
//Display the mapping information.   
foreach (DataRow r in d.Rows)
{
var userNameMatches = false;
var starting = true;
foreach (DataColumn c in r.Table.Columns)
{
if (!userNamePassed)
{
Console.WriteLine(c.ColumnName + " = " + r[c]);
}
else
{
if (starting)
{
starting = false;
if (userName == r[c].ToString())
{
userNameMatches = true;
}
}
if (userNameMatches)
{
Console.WriteLine(c.ColumnName + " = " + r[c]);
}
}
}
}
}
catch (Exception ex)
{
Console.WriteLine($"Error processing database: {db.Name}");
Console.WriteLine($"Error: {ex.Message}");
Console.WriteLine();
}
}
}
}
}

我相信我现在知道是什么在删除我的可执行文件。这不是我想到的,所以我与大家分享答案。今天,我收到了我们首席安全官的电子邮件,通知我编写的程序被赛门铁克端点保护阻止了。在我的测试中,我会一遍又一遍地运行我的应用程序。经过几次迭代后,它将消失。我没有想到可能是我们公司的AV在做这件事。现在看来,这正是正在发生的事情。

感谢大家为帮助我解决这个问题所做的投入。我希望如果其他人遇到这个问题,他们可能会考虑他们的AV的可能性,这是他们编写的应用程序消失的原因。

最新更新