Program tidak berjalan dengan benar sebagai Tugas Terjadwal

12

Situasi

Saya memiliki skrip batch yang menyiapkan beberapa file, menjalankan program ( .exe) dan kemudian menghapus file tersebut.

Tugas ini harus berjalan setiap jam, jadi saya mencoba mengonfigurasi ini menggunakan Tugas Terjadwal. Masalahnya adalah bahwa program yang disebutkan sebelumnya tidak berjalan dengan benar ketika dipanggil dari tugas (baik melalui .batskrip, maupun ketika memanggil .exelangsung), tetapi saya tidak mendapatkan pesan peringatan atau kesalahan dalam log.

Mempersiapkan

Tugas dikonfigurasikan untuk dijalankan sebagai Akun Layanan Windows yang memiliki semua hak istimewa yang ditetapkan dengan benar. Saat menggunakan akun ini untuk masuk melalui RDP, saya dapat menjalankan .batdan .exelangsung tanpa masalah, tetapi tugas tetap tampak tidak melakukan apa-apa. Ini mudah diamati karena program selalu memodifikasi file, dan modifikasi pada timestamp tidak berubah melalui tugas.

Dalam log tugas terjadwal saya mendapatkan pesan informasi untuk tugas memulai proses, keluar, dll. "Kode hasil", bagaimanapun, adalah 111(mencoba Google ini tanpa keberuntungan, satu-satunya asosiasi yang saya dapatkan adalah "nama file terlalu panjang ", yang hanya AFAIK yang sama sekali tidak relevan). Dalam log aplikasi, saya sama sekali tidak mendapatkan apa pun.

Yang saya duga adalah masalahnya

Program ini adalah monstrositas lama yang memunculkan semacam layar splash (sebenarnya ini adalah jendela normal), meskipun GUI tidak diperlukan karena tidak memerlukan interaksi dan menutup sendiri setelah operasi. Jendela muncul sekitar 2 detik.

Saya menduga bahwa persyaratan untuk GUI ini ada hubungannya dengan tugas yang gagal, tapi saya tidak yakin. Ketika saya masuk dengan pengguna yang menjalankan tugas di bawah (melalui RDP), tidak ada jendela yang muncul ketika saya memulai tugas yang dijadwalkan.


Edit tentang GUI

Saya telah membangun executable C # yang sangat kecil yang meluncurkan program tanpa jendela utama (menggunakan ProcessStartInfo.WindowStyle = ProcessWindowStyle.Hidden). Bahkan dengan cara ini, tugas yang dijadwalkan masih tidak berhasil meluncurkan program dengan benar, tetapi kode pengembalian sekarang 0.


Memperbarui

Ketika saya mengkonfigurasi tugas untuk mengatakan "jalankan apakah pengguna masuk atau tidak", dan run with highest privilegesopsi tidak dicentang , nilai kesalahannya adalah 2147943859.


Apa yang bisa saya lakukan untuk memecahkan masalah?

OS = Windows Server 2008 R2 SP1

Jika diperlukan lebih banyak info, beri tahu saya di komentar.

MarioDS
sumber
Apakah skrip dan "program" Anda mengambil input, seperti opsi atau parameter? Sudahkah Anda mencoba menggunakan PowerShell bukannya batch? Saat memulai .exe"program" dengan parameter dari dalam skrip, input harus disediakan dengan benar sebagai argumen.
slybloty
1
Sudahkah Anda mencoba penjadwal dengan program yang berbeda? Ganti saja satu program dengan yang lain, dan lihat hasil apa yang Anda dapatkan.
slybloty
2
@ out-null Saya tidak berpikir bahwa penjadwal tugas menggunakan jendela untuk mengetahui kapan program selesai berjalan, ia harus menunggu prosesnya, apa pun yang dilakukannya dengan windows. Tetapi jika program mencoba untuk mencari sesuatu yang spesifik untuk membuat splash screen-nya (misalkan bilah tugas) dan gagal menemukannya (karena ia berjalan pada desktop / stasiun jendela yang terpisah), mungkin saja ia berhenti ...
Ale
1
BAIK. Sudahkah Anda mencoba menjalankannya di bawah akun LocalSystem? Juga, sudahkah Anda mencoba memantau acara peluncuran proses dengan Process Monitor dari Sysinternals?
Lucky Luke
1
@BradBouchard Meskipun jawaban Anda mungkin tidak memecahkan pertanyaan OP di ini kasus tertentu, itu adalah jawaban yang valid dan dapat berguna untuk masa depan pengunjung ke SF, dan karena itu saya akan mendorong Anda untuk tidak menghapusnya.
Saya katakan Reinstate Monica

Jawaban:

6

Saya yakin masalah Anda ada hubungannya dengan izin akun yang digunakan untuk menjalankan tugas, atau konteks akun yang ada saat mencoba menjalankan tugas.

Tes untuk Persyaratan Sesi Konsol

Mungkin .EXE Anda harus dijalankan di Consolesesi (alias Sesi 0) di komputer. Untuk menguji ini:

  1. Konfigurasikan tugas untuk Jalankan hanya ketika pengguna masuk dan tentukan waktu mulai tugas 2 menit di masa mendatang
  2. Masuk ke mesin dengan akun pengguna yang sama yang digunakan untuk menjalankan tugas (lebih disukai masuk ke sesi konsol, baik dengan secara fisik berada di konsol atau menggunakan program akses jarak jauh yang memberikan akses ke konsol. Untuk mengonfirmasi bahwa Anda menggunakan sesi konsol, dari menjalankan Command Prompt QWINSTA, amati SESSIONNAMEkolom, dan konfirmasi >indikator di sebelah console, dengan kata lain akan muncul sebagai >console)
  3. Tunggu tugas dijalankan

Jika tugas berjalan dengan benar, coba jadwalkan tugas dengan SCHTASKS.EXEmenggunakan /ITparameter. Jika gagal, Anda mungkin tidak punya pilihan selain mengkonfigurasi komputer untuk masuk secara otomatis sebagai akun pengguna layanan Anda dan menjalankan tugas sebagai program startup.

Periksa Izin

Selain itu, seperti yang telah saya sarankan, periksa yang berikut untuk mengonfirmasi akun yang digunakan untuk menjalankan tugas diizinkan dengan benar:

  1. Berikan akun itu Logon sebagai hak pengguna pekerjaan batch (Ditemukan dalam Kebijakan Grup Lokal di Computer Configuration/Windows Settings/Security Settings/Local Policies/User Rights Assignments)
  2. Konfirmasikan tugas telah dikonfigurasi untuk Menjalankan dengan hak istimewa tertinggi
  3. Konfirmasikan pengguna memiliki izin NTFS penuh untuk semua folder & file yang harus berinteraksi dengannya. Jangan membuat asumsi; alih-alih konfirmasikan dengan menavigasi ke lokasi file tersebut dan menggunakan Effective Permissionstab di Properti file / folder diSecurity > Advanced

Hal-hal tambahan untuk diperiksa / dicoba

  • Apakah tugas tersebut memerlukan akses ke akses ke sumber daya jaringan? Hal-hal seperti drive yang dipetakan mungkin ada saat Anda masuk dengan akun pengguna, tetapi tergantung pada konfigurasi server mungkin tidak ada dalam konteks akun pengguna saat dijalankan dari Penjadwal Tugas.
  • Tambahkan beberapa logging ke file batch Anda. Setelah setiap baris dieksekusi, minta ia menulis beberapa output ke file log sehingga Anda tahu di mana itu macet. Sebagai contoh:

    @echo off
    echo Line 1 >> "C:\MyLog.txt"
    "C:\My Folder\myOldProgram.exe"
    echo Line 2 >> "C:\MyLog.txt"
    DEL somefile.dat
    echo Line 3 >> "C:\MyLog.txt"
    
  • Coba jalankan .EXE Anda dengan START, misalnyaSTART "myTitle" "C:\full\path\to\my.EXE"

Saya katakan Reinstate Monica
sumber
2

Saya menanggapi posting lama kalau-kalau itu membantu orang lain. Saya memiliki masalah yang sama. Log acara mengatakan program selesai secara normal, tetapi bahkan baris kode pertama tidak akan menulis ke log untuk saya. Itu akhirnya menjadi opsi "Mulai Di" di Penjadwal Tugas. Terpikir oleh saya bahwa program berjalan dengan baik dari baris perintah ketika saya berada di direktori saat ini. Ada file manifes dan dependensi lain di direktori yang sama. Jadi, jika Anda memberi tahu pekerjaan yang dijadwalkan untuk memulai di direktori yang sama dengan EXE, Anda mungkin mendapatkan hasil yang menguntungkan. Itu solusi bagi saya.

Rob Wilson
sumber
Ini adalah solusi untuk menjalankan aplikasi konsol khusus yang dikembangkan di Visual Studio dengan mendukung file konfigurasi.
billfredtom
1

mungkin ini membantu kamu?

/programming/6939548/a-workaround-for-the-fact-that-a-scheduled-task-in-windows-requires-a-user-to-be

Kami memiliki masalah serupa dan satu-satunya solusi Anda adalah kami membuat akun khusus di server dengan autologin. Jadi jika tugas dijalankan di bawah pengguna yang sudah masuk. Exe kami bekerja dengan baik ...

Saya tahu ini bukan solusi yang sangat bagus tetapi bagi kami itu adalah satu-satunya hal yang berhasil. saya tidak tahu apakah ini bekerja untuk Anda ... (Tetapi dengan pekerjaan ini di sekitar Anda harus memeriksa apakah pengguna benar-benar masuk sepanjang waktu ...)

frupfrup
sumber
Tugas itu bahkan tidak berjalan dengan benar untuk saya ketika pengguna berjalan di bawah secara efektif masuk (melalui RDP). Saya menggunakan akun layanan untuk masuk melalui RDP, memulai tugas secara manual dan saya tidak melihat jendela yang muncul.
MarioDS
2
Sudahkah Anda menghapus opsi "jalankan dengan hak istimewa tertinggi"? Saya pikir ketika Anda telah memeriksa opsi ini akan terjadi evelation of rights (UAC) dan Anda tidak akan melihat jendela bahkan ketika pengguna masuk (akan dipanggil dalam sesi terpisah tanpa jendela dan akan gagal). Coba juga untuk memilih opsi "dikonfigurasi untuk" -> "Windows Server 2003, Windows XP atau Windows 2000".
frupfrup
Tampaknya tidak ada bedanya, kecuali ketika saya sekarang mengatur "jalankan apakah pengguna login atau tidak" Saya mendapatkan kode kesalahan 2147943859. Saya hanya dapat mengatur "Dikonfigurasi untuk" baik Windows Vista/Windows Server 2008atau Windows 7/Windows Server 2008 R2. Tampaknya tidak ada bedanya.
MarioDS
baik. satu tes terakhir: Buat tugas baru dengan "buat tugas baru" alih-alih "buat tugas mudah" (saya tidak tahu teks mana yang benar-benar ditampilkan - server saya adalah bahasa Jerman - tapi saya harap Anda tahu apa yang saya maksud.) dan kemudian saya pikir Anda dapat memilih "windows Server 2003, ...". dan kemudian tolong coba sekali lagi dengan opsi lain ...
frupfrup
1

Orang-orang dari perusahaan yang menjalankan server pelanggan kami mengatakan bahwa program GUI tidak akan berjalan melalui tugas yang dijadwalkan dengan cara apa pun.

Mereka menggunakan sistem pemantauan yang juga memiliki fitur penjadwalan tugas. Mereka telah mengaturnya melalui itu dan tampaknya berhasil.

Maaf saya tidak mendapat kesempatan untuk mengevaluasi lebih banyak saran di sini, tapi terima kasih sudah mencoba membantu. Saya berharap ini dapat membantu orang lain di masa depan, yang saya pikir pasti akan membantu.

MarioDS
sumber
1

Saya sedang mencoba untuk memulai dan program VB6 lama menggunakan penjadwal tugas pada server Windows 2008 R2. Aplikasi akan dijalankan dari exe, melalui file batch atau mengklik pintasan, tetapi tidak akan berjalan dari penjadwal tugas. Saya menemukan bahwa ketika file konfigurasi untuk aplikasi, yang disimpan dalam folder aplikasi di direktori C: \ program file (x86) disalin ke folder aplikasi pada c: \ program data. Penjadwal bekerja. tampaknya cmd.exe menerapkan konfigurasi dari lokasi yang berbeda dengan yang digunakan oleh penjadwal tugas. Jika aplikasi Anda memiliki file konfigurasi, Anda dapat mencoba memindahkannya ke folder c: \ programdata \ application.

Kasa
sumber
0

Apakah Anda merujuk drive jaringan yang dipetakan dalam skrip atau program Anda? Saya memiliki masalah yang sama beberapa waktu lalu di mana tugas yang dijadwalkan tidak akan berjalan, dan saya tidak tahu mengapa. Mengubah jalur ke jalur UNC memecahkannya untuk saya.

Ubah T:\Apps\MyProgram.exeke\\MyServer\MyShare\Apps\MyProgram.exe

AdamsTips
sumber
Tidak, programnya ada di C:drive lokal .
MarioDS
0

Ketika saya mengonfigurasi tugas untuk mengatakan "jalankan apakah pengguna masuk atau tidak", dan jalankan dengan opsi hak istimewa tertinggi tidak dicentang, nilai kesalahannya adalah 2147943859.

2147943859 dikonversi ke Hex adalah 800705b3 yang mana perjalanan singkat ke Google memberi tahu saya berarti "Tidak dapat memulai program instalasi di komputer. Operasi ini memerlukan stasiun jendela interaktif."

Sekarang, mungkin ada beberapa cara untuk membuatnya berjalan secara interaktif tanpa menggunakan PSEXEC (dari Sysinternals) tetapi karena saya sudah tahu bagaimana melakukannya melalui PSEXEC, itulah yang saya gunakan.

PSExec: http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx

Oleh karena itu, ubah tindakan Anda untuk menambahkan semuanya dengan psexec.exe -i (dan -h jika Anda perlu ditingkatkan) dan itu harus bekerja.

Saya sudah mencoba ini di Windows Server 2008 R2 SP1 dengan berikut ini di 'tindakan' saya:

c:\windows\system32\cmd.exe

dan kemudian parameternya:

/c psexec.exe -h -i notepad.exe

Ketika saya menjalankan tugas secara manual (karena saya tidak punya jadwal) saya mendapatkan notepad yang ditinggikan berjalan di sesi saya saat ini.

Mark Allen
sumber
0

Mungkin jawaban untuk pertanyaan ini akan membantu orang lain membaca utas ini?

/programming/32589381/

Ringkasan: Tugas Terjadwal Windows 2012 tidak melihat variabel lingkungan yang benar, termasuk PATH, untuk akun yang tugasnya dijalankan.

Saya membaca semua ini cukup lama sebelum saya mengerjakan di atas. (Yang merupakan masalah saya sendiri yang mengarah ke pertanyaan OP yang sama.)

Setelah Anda (akhirnya!) Mengetahui hal ini, cukup mudah untuk mengujinya (sesuai dengan jawaban stackoverflow), lihat itu terjadi, dan selesaikan ....

MikeBeaton
sumber