c#删除用户配置文件

本文关键字:配置文件 用户 删除 | 更新日期: 2023-09-27 18:07:18

我正在尝试使用c#删除远程服务器上的用户配置文件。我以我自己的身份运行这个项目。如果我自己浏览到''server'c$'Users',我可以删除目录"User"。它没有误差。如果我使用c#编写的程序和下面的代码试图删除相同的目录,我会得到这个异常。

访问路径appsFolder。Itemdata-ms '被拒绝。

我的删除做错了吗?

Directory.Delete("''''server''c$''Users''User''",true);

c#删除用户配置文件

删除用户配置文件文件夹而不相应地清理注册表可能会导致一些不希望的副作用,如临时配置文件创建等。我建议使用DeleteProfile函数,可以在userenv.dll

中找到。

我的代码如下:

    internal class Program
{
    [DllImport("userenv.dll", CharSet = CharSet.Unicode, ExactSpelling = false, SetLastError = true)]
    public static extern bool DeleteProfile(string sidString, string profilePath, string omputerName);
    private static void Main(string[] args)
    {
        try
        {
            var username = args[0];
            var principalContext = new PrincipalContext(ContextType.Domain); // Domain => to support local user this should be changed probably, didn't test yet
            var userPrincipal = UserPrincipal.FindByIdentity(principalContext, username);
            if (userPrincipal != null)
            {
                Console.WriteLine("User found");
                var userSid = userPrincipal.Sid;
                Console.WriteLine("User {0} has SID: {1}", username, userSid);
                Console.WriteLine("Will try to DeleteProfile next..");
                DeleteProfile(userSid.ToString(), null, null);
                Console.WriteLine("Done - bye!");
            }
            else
            {
                Console.WriteLine("ERROR! User: {0} not found!", username);
            }
        }
        catch (Exception exception)
        {
            Console.WriteLine(exception);   
        }
    }
}

请考虑,这段代码只是用于演示目的,应该稳定用于生产。

欢呼,屁股的

顺便说一句,这里有更多的MSDNhttps://msdn.microsoft.com/en-us/library/windows/desktop/bb762273 (v = vs.85) . aspx

嗨,我正试图做同样的事情,发现Directory.Delete()不能删除文件,如果文件是隐藏的或系统文件。

使用cmd来删除文件夹

   public static FileAttributes RemoveAttribute (FileAttributes att, FileAttributes attToRemove)
   {
        return att &  ~attToRemove;
    }
public void DeleteProfileFolder(string file)
 {
    Process process = new Process();
    ProcessStartInfo startInfo = new ProcessStartInfo();
    startInfo.WindowStyle = ProvessWindowsStyle.Hiddenl
    startInfo.FileName = "cmd";
    startInfo.Arguments = "/C rd /S /Q  '"" + file + "'"";
    process.StartInfo = startInfo;
   process.Start();
   process.WaitForExit();
}
public void Deletes(DirectoryInfo baseDir)
{  
     if(! baseDir.Exists)
       return;
   var Dirs = Directory.EnumerateDirectories(baseDir.ToString(),"*.*",SearchOption.TopDirectoryOnly);
   var files = Directory.EnumerateFiles(baseDir.ToString(),"*.*",SearchOption.TopDirectoryOnly);
   foreach(var dir in Dirs)
   {
         DeleteProfileFolder(dir);
    } 
  foreach(var file in files)
 {
      FileAttributes att = File.GetAttributes(f);
      if((att & FileAttributes.Hidden) == FileAttribute.Hidden)
      {  
            att = RemoveAttribute(att, FileAttributes.Hidden);
            File.SetAttributes(file , att);
            File.SetAttributes(File, FileAttributes.Normal)
        }
   File.Delete(file);
  }
}

调用This

删除("c: ' '用户");//在本地操作

我没有尝试过网络位置,但我想这将工作。

注意:要完全删除userProfile,我们还需要删除注册表