Запустите программу Java с вновь созданным пользователем Windows - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь создать нового пользователя Windows, а затем использовать его, чтобы открыть процесс из файла .jar . Проблема в том, что у нового пользователя нет прав на Java, и он не открывает процесс, но в случае успеха выдает ошибку, подобную этой:

Не удалось открыть узел реестра Windows. \ JavaSoft \ Prefs \ com \ c в корне 0x80000001

А вот мой код:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.DirectoryServices;
using System.Linq;
using System.Security;
using System.Text;
using System.Threading.Tasks;

namespace OpenExe
{
    class Program
    {
        private Process proc;
        private static string Username { get; set; }
        public static void createUser(string Name, string Pass)
        {
            try
            {
                DirectoryEntry AD = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer");
                DirectoryEntry NewUser = AD.Children.Add(Name, "user");
                NewUser.Invoke("SetPassword", new object[] { Pass });
                NewUser.Invoke("Put", new object[] { "Description", "Test User from .NET" });
                NewUser.CommitChanges();
                DirectoryEntry grp;

                grp = AD.Children.Find("Administrators", "group");
                if (grp != null) { grp.Invoke("Add", new object[] { NewUser.Path.ToString() }); }
                Console.WriteLine("Account Created Successfully");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }

        public void exec(string filename, string username, string password)
        {
            using(proc = new Process())
            {
                SecureString ssPwd = new SecureString();
                proc.StartInfo.WorkingDirectory = @"D:\";
                proc.StartInfo.UseShellExecute = false;
                proc.StartInfo.FileName = "java";
                proc.StartInfo.Arguments = @"-jar D:\rawclient.jar";
                proc.StartInfo.UserName = username;
                for (int x = 0; x < password.Length; x++)
                {
                    ssPwd.AppendChar(password[x]);
                }
                proc.StartInfo.Password = ssPwd; 
                proc.Exited += new EventHandler(process_Exited);
                proc.Start();
            }
        }

        private void process_Exited (object sender, EventArgs e)
        {
            DirectoryEntry localDirectory = new DirectoryEntry("WinNT://" + Environment.MachineName.ToString());
            DirectoryEntries users = localDirectory.Children;
            DirectoryEntry user = users.Find(Username);
            users.Remove(user);
        }
        static void Main(string[] args)
        {
            string filename = @"D:/rawclient.jar";
            string username = Guid.NewGuid().ToString("n").Substring(0, 8);
            Username = username;
            string pass = Guid.NewGuid().ToString("n").Substring(0, 8);
            createUser(username, pass);
            Program prog = new Program();
            prog.exec(filename, username, pass);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...