Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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# 执行会毫无例外地停止_C# - Fatal编程技术网

C# 执行会毫无例外地停止

C# 执行会毫无例外地停止,c#,C#,我有一些代码,可以使用在客户端计算机上运行的服务通过网络删除用户配置文件,如下所示: public static void DeleteProfiles() { ConsoleWrapper.WriteLine("We're in DeleteProfiles()"); try { string[] users = GetUsers(); ConsoleWrapper.WriteLine("Users gotten");

我有一些代码,可以使用在客户端计算机上运行的服务通过网络删除用户配置文件,如下所示:

public static void DeleteProfiles()
{
    ConsoleWrapper.WriteLine("We're in DeleteProfiles()");

    try
    {
        string[] users = GetUsers();
        ConsoleWrapper.WriteLine("Users gotten");

        if (users == null || users.Length == 0)
        {
            DeletingProfiles = false;
            ConsoleWrapper.WriteLine("Null or no user loaded");
            return;
        }

        DirectoryInfo oInfo = new DirectoryInfo("C:/Users");
        if (!oInfo.Exists)
            oInfo = new DirectoryInfo("C:/Documents and Settings");
        ConsoleWrapper.WriteLine("Profile folder gotten.");

        ConsoleWrapper.WriteLine("User Directory: " + oInfo.FullName);
        ConsoleWrapper.WriteLine("\nDirectories to be deleted:");

        DirectoryInfo[] SubDirectories = oInfo.GetDirectories();

        foreach (DirectoryInfo oSubDir in SubDirectories)
        {
            bool match = false;
            foreach (string user in users)
            {
                if (user == null)
                    continue;
                if (oSubDir.Name.ToLower() == user.ToLower())
                {
                    ConsoleWrapper.WriteLine("Matched: " + oSubDir.FullName);
                    match = true;
                    break;
                }
            }

            if (match)
                continue;
            try
            {
                ConsoleWrapper.WriteLine(oSubDir.FullName);
                DeletePath(oSubDir.FullName);
            }
            catch (Exception ex)
            {
                ConsoleWrapper.WriteLine(ex.StackTrace);
            }
        }
    }
    catch (Exception dirEx)
    {
        ConsoleWrapper.WriteLine(dirEx.Message);
    }
}
ConsoleWrapper中的WriteLine方法实际上将数据附加到txt文件中,因为这是我想到的在不同机器上调试的最简单方法

当我在命令行应用程序中使用它时,这段代码确实有效,但当我尝试在Windows服务中使用它时,它只会写“我们在DeleteProfiles()中”。正如您所注意到的,我捕获了每个“可捕获”的异常,但我仍然不明白发生了什么

所有的客户端计算机都出现了这个问题,但它在我的台式机和笔记本电脑上都能正常工作。我做错了什么


有关DeletePath代码,请参见。实际上,我将其提升并转换为C代码。

如果捕获了每个可捕获的异常,但在日志中没有看到条目,则很可能抛出了一个不可捕获的异常。这通常以StackOverflowException的形式出现。默认情况下,进程无法捕获此类异常


如果DeletePath是一个递归函数,请尝试使其迭代,看看这是否解决了问题。

如果捕获了每个可捕获的异常,但在日志中没有看到条目,则很可能抛出了一个不可捕获的异常。这通常以StackOverflowException的形式出现。默认情况下,进程无法捕获此类异常


如果DeletePath是一个递归函数,请尝试使其迭代,看看这是否解决了问题。

可能您没有刷新ConsoleWrapper。尝试在finally块中进行刷新,或打开自动刷新。

可能您没有刷新ConsoleWrapper。尝试在finally块中放置刷新,或打开自动刷新。

GetUsers()做什么

这可能需要很长时间吗

如何从服务中调用DeleteProfiles()

如果直接从ServiceBase.OnStart()的重写调用DeleteProfiles(),则需要知道OnStart()在30秒后超时。

GetUsers()的作用是什么

这可能需要很长时间吗

如何从服务中调用DeleteProfiles()


如果您直接从ServiceBase.OnStart()的重写调用DeleteProfiles(),则需要知道OnStart()在30秒后超时。

如果您无法理解,请将其放在客户端上并连接到它。您可能需要在方法的顶部放置一个Thread.Sleep(),以便有足够的时间在客户端的进程列表中查找服务进程,并在服务进程实际运行时将其连接。

如果您无法找到,请在客户端上放置并连接。您可能需要在方法的顶部放置一个Thread.Sleep(),这样您就有足够的时间在客户端的进程列表中查找服务进程,并在它实际运行时将其连接。

从日志记录的角度来看,我会使用一个众所周知的库,如log4net或Microsoft的日志记录应用程序块。当您滚动自己的日志记录时,请确保调用Flush()以清除任何bufferred写入。我发现log4net更容易合并到现有代码中,除非您已经是一家企业库商店。

从日志记录的角度来看,我会使用众所周知的库,如log4net或Microsoft的日志记录应用程序块。当您滚动自己的日志记录时,请确保调用Flush()以清除任何bufferred写入。我发现,除非您已经是一家企业图书馆商店,否则log4net更容易合并到现有代码中。

服务需要额外的安全措施才能与桌面交互。此处有一个安装程序可为您提供:
服务需要额外的安全措施才能与桌面交互。此处有一个安装程序可为您提供:

DeletePath调用递归函数SetAttributes。实际上,我拥有的是DeletePath调用递归函数SetAttributes的代码的C#副本。我所拥有的实际上是代码的C#副本,我的第一个猜测是,这与安全性有关。我的第二个猜测是检查配置/环境。我的第一个猜测是这与安全性有关。我的第二个猜测是检查配置/环境。谢谢。问题出在GetUsers()上。谢谢。问题出在GetUsers()上。谢谢。这很有帮助。我在代码中添加了注册表调用。谢谢。这很有帮助。我在代码中添加了注册表调用。