Запуск Net 4.0 говнобыдлопроги из сетевой папки с помощью gpo

Alena_08_11

Есть говнобыдлопрога, накиданная мной на c# net 4.0. Она чё то делает, и иногда обменивается с серверной частью, кидая и получая всякое через NetworkStream полученный от экземпляра класса TcpClient, с помощью метода GetStream
Если руками запустить из сетевой папки - то все ок, прога нормально обменивается данными с серверной частью.
Если поместить запуск проги в gpo в logon скрипт - то процесс появляется, а вот обмена данных с серверной частью не происходит.
Мне пока что лень вставлять в прогу отладочные костыли, чтобы можно было попытаться понять ситуацию. МБ кто нить просветит в чем могут быть грабли ?

zorin29

Может быть, дело в недостатке каких-то прав у пользователя, от имени которого запускается прога?

Alena_08_11

Руками я запускал от того же пользователя. и gpo выполнялась для domain admin'а

zorin29

По идее, отличие запуска вручную от запуска через службу отличается тем, что во втором случае нет UI. Может быть, у тебя где-то в другом месте что-то не работает, что зависит от UI?
Больше ничего не придумал.

Alena_08_11

Один из отладочных костылей типа такого :

 try
     {
     tcpClient = new TcpClient(host, port);
    
     var stream = tcpClient.GetStream;
     // Тут оно чё то делает
     }
     catch (Exception ex)
     {
     var debugMsg = ex.Message;
     Crutches.DebugMsg(debugMsg);
     }

показал, что отваливается по эксепшну с debugMsg :
Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение
 127.0.0.1:22000
Что нада сделать, чтобы этот TcpClient явно биндился на нормальный адрес ? (при запуске руками он по ходу нормально биндится).

kokoc88

Что нада сделать, чтобы этот TcpClient явно биндился на нормальный адрес ? (при запуске руками он по ходу нормально биндится).
Передавать этот адрес в строке host.

Alena_08_11

в строке host - адрес сервера
upd :
тысячу раз бля ! строка host вытягивается из ini файла, в случае ненахождения ini- файла, оно даёт дефолтный 127.0.0.1. ini файл лежит рядом с exe-шником. При запуске руками он, по ходу дела, нормально подтягивается.
В общем жесткое прописывание хоста в коде пока вроде решило проблему.

Alena_08_11

Разовьем тему.
ini файл разбирается самодельным быдлопарсером, в основе работы которого лежит :

try
{
var sr = new StreamReader("settings.ini");
string line = "";
var dict = new Dictionary<string, string>
while line = sr.ReadLine != null)
{
var parts = line.Split('=');
var key = parts[0].Trim;
var value = parts[1].Trim;
dict.Add(key, value);
}
.....
}....

Соответственно, settings.ini лежит рядом с запускаемым файлом.
Почему при запуске из gpo логон скрипта не может съесть этот settings.ini ? Нужно прописать абсолютный путь ? Как получить абсолютный путь ?

yroslavasako

По идее, отличие запуска вручную от запуска через службу отличается тем, что во втором случае нет UI.
UI есть у обоих. Просто во втором случае есть ещё ряд специфичный процедур для инициализации.

FRider

короче смотри. Как только создал проект - первым делом подключаешь лог4нет. И все пишешь-пишешь. Вопросов в разы будет меньше

zorin29

Возможно, при запуске из gpo текущий каталог устанавливается во что-то вроде $WINDOWS$\System32.
Рекомендую хранить адрес хоста не в settings.ini, а в app.config, в Settings проекта.
EDIT: вообще парсер settings.ini подозрительно напоминает велосипед.

Dasar

>var sr = new StreamReader("settings.ini");
здесь ошибка.
должно быть аля new StreamReader(Path.Combine(Path.GetDirectory(Application.ExecutablePath "settings.ini";

Alena_08_11

Всем спасибо
EDIT: вообще парсер settings.ini подозрительно напоминает велосипед.
Это он и есть. Причем убогий, с колесами непонятной формы и жестким сиденьем. Мб когда нить выучу матчасть и перепишу как надо.
должно быть аля new StreamReader(Path.Combine(Path.GetDirectory(Application.ExecutablePath "settings.ini";
Да,наверно как то так и должно быть. Я спрашивал как раз о чём то вроде этого.
Оставить комментарий
Имя или ник:
Комментарий: