Я в основном пытаюсь создать и запустить службу Windows на сервере.Эта служба имеет в основном 2 задания:
- Для регистрации метки времени в файле на UNC (другой путь к серверу), чтобы проверить доступ
- Вызов простого консольного приложения с использованием другогоuser
Теперь я создал службу Windows, но она не будет регистрировать путь к серверу, так как он запускается через локальную систему.Поэтому я попытался развернуть его, используя учетную запись пользователя с доступом к пути к серверу, и он вошел в систему, но тогда все дело в локальной системе.
Итак, теперь я немного изменил требование. Теперь возможно развернуть службу только как локальная система, но вместо прямой регистрации по пути к серверу я бы предпочел, чтобы консольное приложение выполняло ведение журнала.,Но как мне заставить консольное приложение работать под другой учетной записью пользователя.
Это код, который я использую для вызова консольного приложения через другого пользователя (учтите, что служба запускается под LocalSystem), и этолибо выдает ошибку «Не удается найти указанный файл», либо «Неверное имя каталога», но я уверяю вас, что обе вещи существуют.Я даже использовал пути, введенные в startInfo, для отладки, чтобы проверить.
public static void InitiateCommandProcess()
{
Process process = new Process();
SecureString ssPwd = new SecureString();
string fileName = ConfigurationManager.AppSettings["FileName"];
string workingDirectory = ConfigurationManager.AppSettings["ApplicationDirectory"];
string param = ConfigurationManager.AppSettings["PARAM"];
string userName = "myUserName";
string password = "MyPassWord";
for (int x = 0; x < password.Length; x++)
{
ssPwd.AppendChar(password[x]);
}
ProcessStartInfo startInfo = new ProcessStartInfo
{
UseShellExecute = false,
WindowStyle = ProcessWindowStyle.Hidden,
CreateNoWindow = true,
ErrorDialog = false,
FileName = @"" + fileName,
WorkingDirectory = @"" + workingDirectory,
Arguments = @"" + param,
RedirectStandardOutput = true,
RedirectStandardError = true,
RedirectStandardInput = true,
Domain = "EMEA",
UserName = userName,
Password = ssPwd
};
process.StartInfo = startInfo;
try
{
Logger.Log($"Working in Directory Path : {workingDirectory} );");
Logger.Log($" Username : {userName} and Executing : {fileName}");
process.Start();
Logger.Log($"Process \"{ConfigurationManager.AppSettings["FileName"]}\" Executed at {DateTime.Now}");
}
catch (Exception ex)
{
Logger.Log($"Error occured in command process execution, Message : {ex.Message}", true);
}
}
Путь к серверу такой, "\ dfs \ folder \ folder ..."
Янемного нового для этого, так что, пожалуйста, потерпите меня.