Saya sedang berusaha mencoba untuk port aplikasi ASP.NET dari Server 2003 (dan IIS6) ke Server 2008 (IIS7).
Ketika saya mencoba dan mengunjungi halaman di browser saya mendapatkan ini:
Kesalahan Server dalam Aplikasi '/'.
Pengecualian Keamanan
Deskripsi: Aplikasi berusaha melakukan operasi yang tidak diizinkan oleh kebijakan keamanan. Untuk memberikan aplikasi ini izin yang diperlukan, silakan hubungi administrator sistem Anda atau ubah tingkat kepercayaan aplikasi dalam file konfigurasi.
Detail Pengecualian: System.Security.SecurityException: Sumber tidak ditemukan, tetapi beberapa atau semua log peristiwa tidak dapat dicari. Log tidak dapat diakses: Keamanan
Kesalahan Sumber:
Pengecualian yang tidak tertangani dihasilkan selama eksekusi permintaan web saat ini. Informasi mengenai asal dan lokasi pengecualian dapat diidentifikasi menggunakan jejak tumpukan pengecualian di bawah ini.
Jejak Tumpukan:
[SecurityException: Sumbernya tidak ditemukan, tetapi beberapa atau semua log peristiwa tidak dapat dicari. Log yang tidak dapat diakses: Keamanan.]
System.Diagnostics.EventLog.FindSourceRegistration (Sumber string, String machineName, Boolean read only only) +562 System.Diagnostics.EventLog.SourceExists (Sumber string, String machineName) +251
[menggunting]
Inilah hal-hal yang telah saya lakukan untuk mencoba dan menyelesaikannya:
Berikan "Semua Orang" izin akses penuh ke kunci
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Security
. Ini berhasil. Tapi tentu saja saya tidak bisa melakukan ini dalam produksi. Jadi saya menghapus izin "Semua Orang" setelah menjalankan aplikasi selama beberapa menit dan kesalahan muncul kembali.Saya membuat sumber di log Aplikasi dan log Keamanan (dan saya memverifikasi ada melalui regedit) selama instalasi dengan izin tinggi tetapi kesalahan tetap ada.
Saya memberi aplikasi tingkat kepercayaan penuh dalam
web.config
file (dan menggunakanappcmd.exe
) tetapi tidak berhasil.
Adakah yang tahu apa yang bisa dilakukan di sini?
PS: Ini tindak lanjut dari pertanyaan ini . Saya mengikuti jawaban yang diberikan tetapi tidak berhasil (lihat # 2 di atas).
Jawaban:
Untuk memberikan
Network Service
izin baca padaEventLog/Security
kunci (seperti yang disarankan oleh Firenzi dan royrules22) ikuti instruksi dari http://geekswithblogs.net/timh/archive/2005/10/05/56029.aspxStart
kemudianRun
regedt32
atauregedit
Navigasi / perluas ke tombol berikut:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Security
Klik kanan pada entri ini dan pilih Izin
Tambahkan
Network Service
penggunaBerikan izin Baca
UPDATE: Langkah-langkah di atas tidak masalah pada mesin pengembang, di mana Anda tidak menggunakan proses penyebaran untuk menginstal aplikasi.
Namun jika Anda menyebarkan aplikasi Anda ke mesin lain, pertimbangkan untuk mendaftarkan sumber log peristiwa selama instalasi seperti yang disarankan dalam jawaban SailAvid dan Nicole Calinoiu .
Saya menggunakan fungsi PowerShell (memanggil Octopus Deploy.ps1)
sumber
Masalahnya adalah bahwa
EventLog.SourceExists
mencoba untuk mengaksesEventLog\Security
kunci, akses yang hanya diizinkan untuk seorang administrator.Contoh umum untuk program C # yang masuk
EventLog
adalah:Namun, baris berikut gagal jika program tidak memiliki izin administrator dan kuncinya tidak ditemukan
EventLog\Application
seperti yangEventLog.SourceExists
akan coba aksesEventLog\Security
.Oleh karena itu cara yang disarankan adalah membuat skrip instalasi, yang membuat kunci yang sesuai, yaitu:
Satu kemudian dapat menghapus dua garis itu.
Anda juga dapat membuat
.reg
file untuk membuat kunci registri. Cukup simpan teks berikut ke dalam filecreate.reg
:sumber
Solusinya adalah memberikan izin baca akun "Layanan Jaringan" pada kunci EventLog / Keamanan.
sumber
Bagi saya, pemberian izin 'Baca' untuk 'NetworkService' ke seluruh cabang 'EventLog' berhasil.
sumber
Saya memiliki masalah yang sangat mirip dengan program konsol yang saya kembangkan di bawah VS2010 (ditingkatkan dari VS2008 di bawah XP) Prog saya menggunakan EnLib untuk melakukan logging. Kesalahan dipecat karena EntLib tidak memiliki izin untuk mendaftarkan sumber acara baru.
Jadi saya mulai setelah prog yang dikompilasi sebagai Administrator : itu mendaftarkan sumber acara. Kemudian saya kembali mengembangkan dan men-debug dari dalam VS tanpa masalah.
(Anda juga dapat merujuk ke http://www.blackwasp.co.uk/EventLog_3.aspx , itu membantu saya
sumber
Pengecualian ini terjadi untuk saya dari aplikasi .NET konsol yang berjalan sebagai tugas terjadwal, dan saya mencoba melakukan hal yang pada dasarnya sama - membuat Sumber Acara baru dan menulis ke log peristiwa.
Pada akhirnya, pengaturan izin penuh untuk pengguna yang menjalankan tugas pada tombol berikut melakukan trik untuk saya:
sumber
eventlog\Application
daneventlog\Security
; kontrol penuh hanya diperlukan padaeventlog
root.Saya mencoba hampir semua yang ada di sini untuk menyelesaikan masalah ini ... Saya membagikan jawaban yang membantu saya di sini
di http://geekswithblogs.net/timh/archive/2005/10/05/56029.aspx , terima kasih Michael Freidgeim
sumber
Saya mengalami masalah yang sama, tetapi saya harus naik satu tingkat dan memberikan akses penuh kepada semua orang ke kunci HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ EventLog \, alih-alih turun ke keamanan, yang menyelesaikan masalah bagi saya.
sumber
Masalah yang sama pada Windows 7 64bits. Jalankan sebagai administrator memecahkan masalah.
sumber
Kunci baru dengan nama sumber yang digunakan harus dibuat di bawah HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ eventlog \ Aplikasi di regEdit saat Anda menggunakan System.Diagnostics.EventLog.WriteEntry ("SourceName", "ErrorMessage", EventLogEntryType.Eror);
Jadi pada dasarnya pengguna Anda tidak memiliki izin untuk membuat kunci. Dapat melakukan hal berikut tergantung pada pengguna yang Anda gunakan dari nilai Identity di pengaturan Advanced Pool Aplikasi:
Klik kanan di tombol EventLog dan opsi Izin ... pilih 3. Tambahkan pengguna Anda dengan akses Kontrol penuh.
-Jika Anda menggunakan "NetworkService" tambahkan pengguna LAYANAN NETWORK
-Jika Anda menggunakan "ApplicationPoolIdentity", tambahkan IIS APPPOL {nama kumpulan aplikasi Anda} (gunakan lokasi mesin lokal saat mencari pengguna).
-Jika Anda menggunakan "LocalSystem" pastikan bahwa pengguna memiliki izin Administrator. Tidak direkomendasikan untuk kerentanan.
Ulangi langkah dari 1 hingga 3 untuk HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ eventlog \ Security
Untuk debugging dengan Visual Studio saya menggunakan "NetworkService" (itu adalah pengguna ASP.NET) dan ketika situs diterbitkan saya menggunakan "AppicationPoolIdentity".
sumber
FYI ... masalah saya adalah bahwa secara tidak sengaja memilih "Layanan Lokal" sebagai Akun pada properti ProcessInstaller alih-alih "Sistem Lokal". Hanya menyebutkan untuk orang lain yang mengikuti tutorial MSDN sebagai pilihan Layanan Lokal menunjukkan pertama dan saya tidak memperhatikan ....
sumber
Tampaknya ada solusi yang sangat jelas untuk ini bahwa saya belum melihat kelemahan besar, setidaknya di mana tidak praktis untuk mendapatkan hak administratif untuk membuat sumber acara Anda sendiri: Gunakan yang sudah ada.
Dua yang saya mulai gunakan adalah ".Net Runtime" dan "Application Error", yang keduanya sepertinya akan hadir di sebagian besar mesin.
Kerugian utama adalah ketidakmampuan untuk dikelompokkan berdasarkan peristiwa itu, dan bahwa Anda mungkin tidak memiliki ID Peristiwa yang terkait, yang berarti entri log mungkin diawali dengan sesuatu dengan efek "Deskripsi untuk ID Peristiwa 0 dari sumber .Net Runtime tidak dapat ditemukan .... "jika Anda menghilangkannya, tetapi log masuk, dan output tampak luas masuk akal.
Kode yang dihasilkan akhirnya tampak seperti:
Tentu saja, karena selalu ada kemungkinan Anda berada di mesin yang tidak memiliki sumber acara untuk alasan apa pun, Anda mungkin ingin
try {} catch{}
membungkusnya jika gagal dan membuat segalanya lebih buruk, tetapi acara sekarang dapat disimpan.sumber
Saya tidak bekerja pada IIS, tetapi saya memiliki aplikasi yang melempar kesalahan yang sama pada kotak 2K8. Ini berfungsi dengan baik pada kotak 2K3, lanjutkan.
Resolusi saya adalah "Jalankan sebagai administrator" untuk memberikan hak yang lebih tinggi kepada aplikasi dan semuanya bekerja dengan senang hati. Saya harap ini membantu mengarahkan Anda ke arah yang benar.
Windows 2008 adalah hak / izin / elevasi yang benar-benar berbeda dari Windows 2003, gar.
sumber
Hai Saya mengalami masalah yang sama ketika saya sedang mengembangkan aplikasi dan ingin menginstalnya pada PC jarak jauh, saya memperbaikinya dengan melakukan hal berikut:
1) Buka registri Anda, cari: HKLM \ System \ CurrentControlSet \ Services \ EventLog \ Aplikasi (??? YOUR_SERVICE_OR_APP_NAME ???)
Perhatikan bahwa "(??? YOUR_SERVICE_OR_APP_NAME ???)" adalah nama layanan aplikasi Anda ketika Anda mendefinisikannya saat Anda membuat penyebaran .NET, misalnya, jika Anda menamai aplikasi baru Anda "App baru", maka kuncinya adalah: HKLM \ System \ CurrentControlSet \ Services \ EventLog \ Application \ My New app
Note2: Bergantung pada eventLog mana Anda menulis, Anda dapat menemukan pada kotak DEV Anda, \ Application \ (seperti disebutkan di atas), atau juga (\ System) atau (\ Security) tergantung pada acara apa aplikasi Anda menulis, kebanyakan , (\ Aplikasi) harus baik setiap saat.
2) Berada di tombol di atas, Dari menu; Pilih "FILE" -> "Ekspor", lalu simpan file tersebut. (Catatan: Ini akan membuat pengaturan registri yang diperlukan ketika aplikasi harus mengakses kunci ini untuk menulis ke dalam Peraga Peristiwa), file baru akan menjadi file .REG, demi argumen, sebut saja "Aplikasi Baru Saya.REG "
3) Ketika menyebarkan pada PRODuction, konsultasikan dengan Administrator Sistem Server (SA), serahkan file "Aplikasi Baru Saya.REG" bersama dengan aplikasi, dan minta SA untuk menginstal file REG ini, setelah selesai (sebagai admin) ini akan buat kunci untuk aplikasi Anda.
4) Jalankan aplikasi Anda, seharusnya tidak perlu mengakses apa pun selain kunci ini.
Masalah harus diselesaikan sekarang.
Sebab:
Ketika mengembangkan aplikasi yang menulis apa pun ke dalam EventLog, itu akan memerlukan KUNCI untuk itu di bawah registri Eventlog jika kunci ini tidak ditemukan, itu akan mencoba untuk membuatnya, yang kemudian gagal karena tidak memiliki izin untuk melakukannya. Proses di atas, mirip dengan menggunakan aplikasi (secara manual) sedangkan kami membuat ini sendiri, dan tidak perlu pusing karena Anda tidak mengubah registri dengan menambahkan izin ke SEMUA ORANG yang merupakan risiko keamanan pada server produksi.
Saya harap ini membantu menyelesaikannya.
sumber
Meskipun jawaban penginstal adalah jawaban yang baik, itu tidak selalu praktis ketika berhadapan dengan perangkat lunak yang tidak Anda tulis. Jawaban sederhana adalah membuat log dan sumber acara menggunakan perintah PowerShell New-EventLog ( http://technet.microsoft.com/en-us/library/hh849768.aspx )
Jalankan PowerShell sebagai Administrator dan jalankan perintah berikut untuk mengubah nama log dan sumber yang Anda butuhkan.
New-EventLog -LogName Application -Sumber TFSAggregator
Saya menggunakannya untuk memecahkan Pengecualian Log Kejadian ketika Aggregator menjalankan masalah dari codeplex.
sumber
Punya masalah serupa dengan semua server 2008 kami. Log keamanan berhenti bekerja sama sekali karena GPO yang mengambil grup Pengguna yang Diotentikasi dan membaca izin dari kunci
HKLM\System\CurrentControlSet\Services\EventLog\security
Mengembalikan ini sesuai rekomendasi Microsoft memperbaiki masalah ini. Saya menduga memberikan semua pengguna terotentikasi untuk membaca di level yang lebih tinggi juga akan memperbaiki masalah Anda.
sumber
Saya mengalami masalah serupa - dalam kasus saya Sumber terkandung
<
,>
karakter. Mesin 64 bit menggunakan basis genap baru - xml yang akan saya katakan dan karakter - karakter ini (diatur dari string) membuat xml tidak sah yang menyebabkan pengecualian. Bisa dibilang ini harus mempertimbangkan masalah Microsoft - tidak menangani Sumber (nama / string) dengan benar.sumber
Solusi sangat sederhana - Jalankan Aplikasi Visual Studio dalam mode Admin!
sumber
Aplikasi saya terinstal di server web klien. Daripada mengutak-atik izin Layanan Jaringan dan registri, saya memilih untuk memeriksa
SourceExists
dan menjalankanCreateEventSource
installer saya.Saya juga menambahkan coba / tangkap di
log.source = "xx"
dalam aplikasi untuk mengaturnya ke sumber yang diketahui jika sumber acara saya tidak dibuat (Ini hanya akan muncul jika saya menukar .dll alih-alih menginstal ulang).sumber
coba di bawah ini di web.config
sumber
Saya mengalami masalah ini saat menjalankan aplikasi dalam VS. Yang harus saya lakukan adalah menjalankan program sebagai Administrator sekali, maka saya bisa lari dari dalam VS.
Untuk menjalankan sebagai Administrator, cukup arahkan ke folder debug Anda di windows explorer. Klik kanan pada program dan pilih Jalankan sebagai administrator.
sumber
Membangun kembali solusinya bekerja untuk saya
sumber