Member 14901906 Ответов: 2

Vb.net приложение не запускается из планировщика windows


I developed a vb.net application which extract data from oracle db and post in existing Excel-2013 file. This application runs perfect either I run it from .net frame work or direct Exe file but When I schedule it in Window Scheduler it remains in Running Status and does not show in Task manager while if i run it manually it shows. Please suggest how i can run this application from windows schedule. I developed it VStudio-2015.


Что я уже пробовал:

Я пробовал его на разных ОС, таких как Windows-2008 R2 Service Pack-1 и Windows-10, но проблема стояла та же.

Garth J Lancaster

Я уверен, что вы добавили бы ведение журнала в программу
и ловить любые исключения
и проверяйте журналы событий Windows
и содержать полный путь к вашему файлу Excel

поскольку вы не показываете никакого кода, вам будет трудно помочь

Member 14901906

Это мой полный код с фиктивными IP-адресами и электронной почтой

Импортирует System.Data.OracleClient
Импортирует System.Data.Для oledb
Импортирует Microsoft.Офис.Взаимодействие
Импорт System.Xml
Система Импорта.Сведения
Система Импорта.Нет.Почта
Система Импорта.ИО
Общественного Класса Form1
Общественный кон как oledb.Метод oledbconnection
Общественные fileReader как строку
Общественные да как новый oledb для.Объект oledbdataadapter
Общественные ДТ в качестве нового объекта DataTable
Публичный ds как набор данных
Общественные sqlkd1 как строку
Публичный sqlkd2 в виде строки
Публичный sql в виде строки
Публичный sqlb, sqlle, sqlh, sqlf, sqlm, sqlch, sqlr, sqlp, sqla, sqlk, sqll, sqlbm в виде строки

Частная Субформа 1(бывал отправитель как система.Объект, бывал е как система.EventArgs) Обрабатывает MyBase.Load
Попробуй

sqlkd1 = "удалить из inv_dcs_udf "

sqlkd2 = "вставить в ABC "


sqlb = " select * fROM DEF "

sqlh = " select * FROM GHI "

sqlf = " select * FROM JKL "

sqlbm = " select * FROM MNO "

sqlm = " select * FROM PQR "

sqlch = " select * FROM STU "

sqlr = " select * FROM UVW "

sqlk = " select * FROM XYZ "

sqll = " select * FROM ABC2 "

sqle = " select * FROM ABC3 "

sqlp = " select * FROM ABC4 "

sqla = " select * FROM ABC5 "


Для count1 как целого числа = от 1 до 10
Если (count1 = 1), то
fileReader = "172.10.140.106"
ElseIf (count1 = 2) тогда
fileReader = "172.20.140.108"
ElseIf (count1 = 3) тогда
fileReader = "172.20.140.109"
ElseIf (count1 = 4) тогда
fileReader = "172.10.140.107"
ElseIf (count1 = 5) тогда
fileReader = "172.10.140.203"
ElseIf (count1 = 6) тогда
fileReader = "172.10.140.201"
ElseIf (count1 = 7) тогда
fileReader = "172.20.140.204"
ElseIf (count1 = 8) тогда
fileReader = "172.30.140.202"
ElseIf (count1 = 9) тогда
fileReader = "172.40.140.6"
ElseIf (count1 = 10) тогда
fileReader = "172.20.140.150"
Конец, Если
"fileReader = "172.20.140.108"
fill_dataadopter()
Следующий
- Я...Близко()
Попробуй
PopulateSheet(ДТ)

Таймер1.Интервал = 100000
Таймера1.Начать()
Таймер1.Стоп()

email_report()
Поймать ex как исключение
Ящик для сообщений.Показать(напр.сообщение)
Окончательно
ДТ.Распоряжаться()
Конец Попытки

Поймать error_t как исключение
С помощью MsgBox(error_t.Метод toString)

Конец Попытки
Меня.Рядом()
Конец Подводной Лодки
Connection_funcation государственной функции () Как OleDb.OleDbConnection

Возврат Нового OleDb.OleDbConnection("Provider=OraOLEDB.Оракул;источник данных=(описание=(дур=GTU_APP)(ADDRESS_LIST=(address=Москва(протокол=TCP)(узел=" + fileReader + ") порта(Port=1521)))(CONNECT_DATA=(ИД=rproods)(сервер=посвящается)));идентификатор пользователя=reportuser;пароль=доклад")
Конечная Функция
Fill_dataadopter государственной функции ()
кон = connection_funcation()
против.Открыть()
Dim selcmd1 как новая OleDbCommand(sqlkd1, con)
selcmd1.Метод executenonquery()
Dim selcmd2 как новая OleDbCommand(sqlkd2, con)
selcmd2.Метод executenonquery()

Если fileReader = "172.20.140.150", то
Для count1 как целого числа = от 1 до 3
Если (count1 = 1), то
da = New OleDb.OleDbDataAdapter(sqle, con)
да.Заполнить(ДТ)
ElseIf (count1 = 2) тогда
da = New OleDb.OleDbDataAdapter(sqlp, con)
да.Заполнить(ДТ)
ElseIf (count1 = 3)

Member 14901906

Я использовал планировщик задач на Window-10 и то же самое на сервере Windows-2008 с настройкой "запуск независимо от того, вошел ли пользователь в систему или нет"

Maciej Los

Пожалуйста, прочтите ответ OriginalGriff.

2 Ответов

Рейтинг:
2

Dave Kreskowiak

Это должно было быть написано как консольное приложение, а не приложение Windows Forms. Запланированные задания обычно не являются интерактивными для пользователя, поэтому приложение Windows Forms будет представлять описанные вами симптомы.

Посмотри на свой код. У тебя там пара звонков из мессенджера. Они покажут диалоговое окно, в котором пользователь должен нажать кнопку ОК, чтобы закрыть его. До тех пор, пока это не произойдет, ваш код будет сидеть там, "работает" вечно. Запланированные задания обычно выполняются в фоновом режиме без взаимодействия с пользователем, поэтому приложение сидит там, ожидая ввода, который никогда не произойдет.

Воссоздайте приложение как консольное, и оно будет работать лучше. Кроме того, если вы собираетесь показывать сообщения пользователю, регистрируйте их где-нибудь, например в журнале событий приложения или в файле в хорошо известном месте.


Рейтинг:
14

OriginalGriff

Вероятно, это проблема с правами доступа: приложение, запущенное из планировщика, может работать только в том случае, если пользователь вошел в систему или если у него нет интерфейса. Если вы выбрали "запуск независимо от того, вошел пользователь в систему или нет", то он будет запускаться только из планировщика, если он вообще не взаимодействует - любая попытка создать какой-либо пользовательский интерфейс даст описанные вами симптомы.

Подумайте об этом: если он может работать, когда пользователя нет и у него есть пользовательский интерфейс, он обходит протоколы входа в систему, и безопасность этого не допустит. Поэтому, если у вашего приложения есть пользовательский интерфейс, его нельзя настроить на запуск, когда пользователь не вошел в систему (например, пользователь может выйти из системы во время запуска).


CPallini

5.

Maciej Los

5ed!