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 .bat
skrip, maupun ketika memanggil .exe
langsung), 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 .bat
dan .exe
langsung 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 privileges
opsi 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.
.exe
"program" dengan parameter dari dalam skrip, input harus disediakan dengan benar sebagai argumen.Jawaban:
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
Console
sesi (alias Sesi 0) di komputer. Untuk menguji ini:QWINSTA
, amatiSESSIONNAME
kolom, dan konfirmasi>
indikator di sebelahconsole
, dengan kata lain akan muncul sebagai>console
)Jika tugas berjalan dengan benar, coba jadwalkan tugas dengan
SCHTASKS.EXE
menggunakan/IT
parameter. 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:
Computer Configuration/Windows Settings/Security Settings/Local Policies/User Rights Assignments
)Effective Permissions
tab di Properti file / folder diSecurity > Advanced
Hal-hal tambahan untuk diperiksa / dicoba
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:
Coba jalankan .EXE Anda dengan
START
, misalnyaSTART "myTitle" "C:\full\path\to\my.EXE"
sumber
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.
sumber
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 ...)
sumber
Windows Vista/Windows Server 2008
atauWindows 7/Windows Server 2008 R2
. Tampaknya tidak ada bedanya.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.
sumber
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.
sumber
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.exe
ke\\MyServer\MyShare\Apps\MyProgram.exe
sumber
C:
drive lokal .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:
dan kemudian parameternya:
Ketika saya menjalankan tugas secara manual (karena saya tidak punya jadwal) saya mendapatkan notepad yang ditinggikan berjalan di sesi saya saat ini.
sumber
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 ....
sumber