我需要学习如何在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();
}
}
}
}
}
答案 0 :(得分:0)
我相信我现在知道删除我的可执行文件的内容了。这不是我想到的,所以我要与大家分享答案。今天我收到了我们的首席安全官发来的电子邮件,告诉我我编写的程序被Symantec Endpoint Protection阻止了。在我的测试中,我一遍又一遍地运行我的应用程序。经过几次迭代后,它就会消失。我没想到我们公司的AV可能正在做这件事。现在看起来好像正是发生了什么。
感谢大家的帮助,试图帮我解决这个问题。我希望如果其他人遇到这个问题,他们可能会认为他们AV的可能性是他们写的应用程序消失的原因。