System.Security.SecurityException เมื่อเขียนไปยังบันทึกเหตุการณ์


189

ฉันกำลังพยายามพอร์ตแอพ ASP.NET จาก Server 2003 (และ IIS6) ไปยัง Server 2008 (IIS7)

เมื่อฉันลองและเยี่ยมชมหน้าเว็บในเบราว์เซอร์ฉันได้รับสิ่งนี้:

ผิดพลาดเซิร์ฟเวอร์ใน '/' แอพลิเคชัน.

ข้อยกเว้นด้านความปลอดภัย

คำอธิบาย: แอปพลิเคชันพยายามดำเนินการตามนโยบายความปลอดภัยที่ไม่ได้รับอนุญาต หากต้องการให้แอปพลิเคชันนี้ได้รับอนุญาตที่จำเป็นโปรดติดต่อผู้ดูแลระบบของคุณหรือเปลี่ยนระดับความน่าเชื่อถือของแอปพลิเคชันในไฟล์กำหนดค่า

รายละเอียดข้อยกเว้น: System.Security.SecurityException: ไม่พบแหล่งที่มา แต่ไม่สามารถค้นหาบันทึกเหตุการณ์บางส่วนหรือทั้งหมด บันทึกที่เข้าถึงไม่ได้: ความปลอดภัย

ข้อผิดพลาดของแหล่งที่มา:

ข้อยกเว้นที่ไม่สามารถจัดการได้ถูกสร้างขึ้นระหว่างการดำเนินการตามคำขอเว็บปัจจุบัน ข้อมูลเกี่ยวกับที่มาและตำแหน่งของข้อยกเว้นสามารถระบุได้โดยใช้การติดตามสแต็กข้อยกเว้นด้านล่าง

กองติดตาม:

[SecurityException: ไม่พบแหล่งที่มา แต่ไม่สามารถค้นหาบันทึกเหตุการณ์บางส่วนหรือทั้งหมด บันทึกที่เข้าถึงไม่ได้: ความปลอดภัย]

System.Diagnostics.EventLog.FindSourceRegistration (แหล่งที่มาของสตริงเครื่องชื่อ String, บูลีน readOnly เท่านั้น) +562 System.Diagnostics.EventLog.FindSourceRegistration (แหล่งที่มาของสตริงเครื่องชื่อ String) +251

[snip]

นี่คือสิ่งที่ฉันได้ทำเพื่อพยายามแก้ไข:

  1. ให้“ทุกคน” HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Securityได้รับอนุญาตการเข้าถึงแบบเต็มไปยังคีย์ สิ่งนี้ใช้ได้ผล แต่โดยธรรมชาติฉันไม่สามารถทำได้ในการผลิต ดังนั้นฉันจึงลบสิทธิ์“ ทุกคน” หลังจากเรียกใช้แอปในไม่กี่นาทีและข้อผิดพลาดปรากฏขึ้นอีกครั้ง

  2. ฉันสร้างแหล่งที่มาในบันทึกของแอปพลิเคชันและบันทึกความปลอดภัย (และฉันตรวจสอบว่ามีอยู่ผ่าน regedit) ระหว่างการติดตั้งด้วยสิทธิ์ที่ยกระดับ แต่ข้อผิดพลาดยังคงอยู่

  3. ฉันให้แอปมีระดับความน่าเชื่อถือเต็มรูปแบบในweb.configไฟล์ (และใช้appcmd.exe) แต่ไม่มีประโยชน์

ใครบ้างมีความเข้าใจอย่างถ่องแท้เกี่ยวกับสิ่งที่สามารถทำได้ที่นี่?

PS: นี่คือการติดตามคำถามนี้ ฉันทำตามคำตอบที่ให้ แต่ไม่มีประโยชน์ (ดู # 2 ด้านบน)


ฉันได้รับสิ่งนี้เมื่อพยายามเขียนไปยังแหล่งที่กำหนดเองในบริการ. Net ที่ทำงานเป็น NetworkService ฉันเพิ่งเปลี่ยนแหล่งที่มาของบันทึกเหตุการณ์เพื่อให้ตรงกับชื่อบริการที่ได้รับการตั้งค่าผ่านทางแพ็คเกจการตั้งค่าบริการสุทธิ ฉันสังเกตเห็นมันด้วยการเห็นชื่อบริการเป็นกุญแจอยู่ใน HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ EventLog \ Application
Jon Adams

1
ที่เกี่ยวข้อง: stackoverflow.com/questions/286060/…
Chris S

2
อีกคำตอบที่เป็นไปได้: คลิกขวาที่ exe และเลือก "Run As Administrator"
MacGyver

คำตอบ:


169

หากต้องการให้Network Serviceสิทธิ์การอ่านเกี่ยวกับEventLog/Securityคีย์ (ตามที่ Firenzi และ royrules22 แนะนำ) ให้ทำตามคำแนะนำจากhttp://geekswithblogs.net/timh/archive/2005/10/05/56029.aspx

  1. เปิดตัวแก้ไขรีจิสทรี:
    1. เลือกStartจากนั้นRun
    2. ป้อนregedt32หรือregedit
  2. นำทาง / ขยายไปยังคีย์ต่อไปนี้:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Security

  3. คลิกขวาที่รายการนี้และเลือกสิทธิ์

  4. เพิ่มNetwork Serviceผู้ใช้

  5. ให้สิทธิ์ในการอ่าน

UPDATE:ขั้นตอนข้างต้นใช้ได้บนเครื่องของนักพัฒนาซอฟต์แวร์ซึ่งคุณไม่ได้ใช้กระบวนการปรับใช้เพื่อติดตั้งแอปพลิเคชัน
แต่ถ้าคุณปรับใช้แอพลิเคชันของคุณไปยังเครื่องอื่น ๆ (s) พิจารณาเพื่อลงทะเบียนแหล่งบันทึกเหตุการณ์ระหว่างการติดตั้งตามที่แนะนำในของ SailAvidและนิโคล Calinoiu ของคำตอบ

ฉันใช้ฟังก์ชัน PowerShell (การโทรใน Octopus Deploy.ps1)

function Create-EventSources() {
    $eventSources = @("MySource1","MySource2" )
    foreach ($source in $eventSources) {
            if ([System.Diagnostics.EventLog]::SourceExists($source) -eq $false) {
                [System.Diagnostics.EventLog]::CreateEventSource($source, "Application")
            }
    }
}

ใน IIS7 คุณสามารถกำหนด "NETWORK SERVICE" เป็นข้อมูลประจำตัวสำหรับกลุ่มแอพ (คุณอาจพบว่า ApplicationPoolIdentity เป็นค่าเริ่มต้น) หรือคุณสามารถสร้างผู้ใช้ใหม่ต่อแอพพลิเคชั่นพูลและกำหนดสิทธิ์ใน "บัญชีที่กำหนดเอง" ดูระบุรหัสประจำตัวสำหรับกลุ่มแอปพลิเคชัน (IIS 7)
Grokodile

5
การเปลี่ยนแปลงจะมีผลเฉพาะหลังจากที่คุณรีสตาร์ท aplication บน IIS
Zé Carlos

7
ฉันให้สิทธิ์ IIS_IUSRS ในการอ่าน / เขียนรหัสเหตุการณ์และอ่านรหัสความปลอดภัย ผลิตภัณฑ์ของฉันต้องการสิทธิ์ในการเขียนบนคีย์ล็อกเหตุการณ์เพราะสร้างแหล่งที่มาของเหตุการณ์เอง
duck9

1
duck9 ฉันถูกต้องสำหรับ IIS8 ดูที่นี่สำหรับรายละเอียดเพิ่มเติม: stackoverflow.com/questions/712203/…
thedrs

1
ดูที่serverfault.com/a/81246/219898เกี่ยวกับผู้ใช้กลุ่มแอพและสิทธิ์ที่เกี่ยวข้อง - สำหรับโซลูชันนี้ ขอบคุณ @Michael Freidgeim - ช่วยได้มาก
Anthony Horne

59

ปัญหาคือว่าEventLog.SourceExistsพยายามที่จะเข้าถึงEventLog\Securityกุญแจการเข้าถึงที่ได้รับอนุญาตเท่านั้นสำหรับผู้ดูแลระบบ

ตัวอย่างทั่วไปของการเข้าสู่ระบบ C # EventLogคือ:

string sSource;
string sLog;
string sEvent;

sSource = "dotNET Sample App";
sLog = "Application";
sEvent = "Sample Event";

if (!EventLog.SourceExists(sSource))
    EventLog.CreateEventSource(sSource, sLog);

EventLog.WriteEntry(sSource, sEvent);
EventLog.WriteEntry(sSource, sEvent, EventLogEntryType.Warning, 234);

อย่างไรก็ตามบรรทัดต่อไปนี้ล้มเหลวถ้าโปรแกรมไม่ได้สิทธิ์ของผู้ดูแลและที่สำคัญไม่ได้อยู่ภายใต้EventLog\Applicationเป็นแล้วจะพยายามที่จะเข้าถึงEventLog.SourceExistsEventLog\Security

if (!EventLog.SourceExists(sSource))
    EventLog.CreateEventSource(sSource, sLog);

ดังนั้นวิธีที่แนะนำคือการสร้างสคริปต์การติดตั้งซึ่งจะสร้างคีย์ที่เกี่ยวข้อง ได้แก่ :

แอปตัวอย่าง HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ EventLog \ Application \ dotNET

หนึ่งสามารถลบสองบรรทัดเหล่านั้น

คุณสามารถสร้าง.regไฟล์เพื่อสร้างรีจิสตรีคีย์ได้ เพียงบันทึกข้อความต่อไปนี้ลงในไฟล์create.reg:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\dotNET Sample App]

1
นี่คือสิ่งที่ฉันทำเพื่อบริการทั้งหมดของฉัน ฉันเชื่อว่านี่เป็นสิ่งที่ถูกต้องที่จะทำ ในทุกบริการที่ฉันใช้บันทึกเหตุการณ์ฉันมีไฟล์. reg เหมือนกับที่อยู่ด้านบน หมายเหตุเล็กน้อยหนึ่งไฟล์จะต้องบันทึกเป็น Unicode-32 (cp 1200. )
Valo

คำตอบนี้อธิบายถึงเหตุผลที่แท้จริงที่อยู่เบื้องหลังข้อผิดพลาด การตรวจสอบที่มีอยู่พยายามแจกแจงคีย์ทั้งหมด ถ้ามีอยู่ให้ตรวจสอบว่ามีการทำงานได้ดี
DanO

EventLog \ Security นี่คือกุญแจสู่การทำงานตรวจสอบให้แน่ใจว่าคุณได้รับอนุญาต
Princa

45

วิธีแก้ไขคือให้สิทธิ์ในการอ่านบัญชี "บริการเครือข่าย" ในคีย์ EventLog / Security


1
ฉันเห็นโซลูชันที่คล้ายกันรอบ ๆ แต่ฉันแค่สงสัยว่าทำไมมันถึงเป็นแบบนี้ เพราะฉันเห็นว่าบริการจำนวนมากเข้าสู่ระบบในฐานะ NetworkService และพวกเขาจะต้องสามารถอ่านบันทึกเหตุการณ์ / ความปลอดภัยได้ เหตุใดจึงจำเป็นต้องเพิ่มการอนุญาตสำหรับ NetworkService
h - n

11
สำหรับพวกเราที่ไม่คลานผ่านรีจิสตรีลิงค์นี้อาจมีประโยชน์: social.msdn.microsoft.com/forums/en-US/…
อัลลัน

Nice link Allan จุด # 3 โดยคำตอบที่ยอมรับเป็นสิ่งสำคัญและได้กัดฉันหนึ่งครั้ง เช่นการให้สิทธิ์ที่คีย์รีจิสทรี EventLog หลักจะไม่เผยแพร่ไปยัง "บันทึกที่เข้าถึงไม่ได้" เช่น Security และ Virtual Server แม้ว่าจะเป็นคีย์ย่อยในรีจิสตรีก็ตาม หากคุณต้องการเข้าถึงบันทึกเหตุการณ์แบบเต็มคุณจะต้องให้สิทธิ์ที่ BOTH ระดับบันทึกเหตุการณ์หลักและระดับความปลอดภัยของเด็ก
Ben Barreth

1
การเปลี่ยนแปลงจะมีผลหลังจากที่คุณรีสตาร์ท aplication บน IIS
Zé Carlos

สำหรับผู้ที่พยายามคัดลอก / วางตรวจสอบให้แน่ใจว่ามีช่องว่างระหว่างคำว่า "บริการเครือข่าย"
Chris Fremgen

7

สำหรับฉันเพียงแค่ให้สิทธิ์ 'อ่าน' สำหรับ 'NetworkService' กับสาขา'EventLog'ทั้งหมด


ที่ไม่เกี่ยวข้องกันมากเนื่องจากสำหรับคีย์ย่อยเช่น "ความปลอดภัย" หรือ "เซิร์ฟเวอร์เสมือน" จำเป็นต้องให้สิทธิ์การเข้าถึงเพื่ออ่านเป็นรายบุคคลเนื่องจากสิทธิ์ถูกตั้งค่าให้ไม่สืบทอดจากคีย์หลัก
Serge

7

ฉันมีปัญหาคล้ายกันมากกับโปรแกรมคอนโซลที่ฉันพัฒนาภายใต้ VS2010 (อัพเกรดจาก VS2008 ภายใต้ XP) โปรแกรมของฉันใช้ EnLib เพื่อทำการบันทึกบางอย่าง ข้อผิดพลาดเกิดขึ้นเนื่องจาก EntLib ไม่ได้รับอนุญาตให้ลงทะเบียนแหล่งเหตุการณ์ใหม่

ดังนั้นฉันจึงเริ่มต้นเมื่อ prog รวบรวมของฉันเป็นผู้ดูแลระบบ : มันลงทะเบียนแหล่งที่มาของเหตุการณ์ จากนั้นฉันกลับไปที่การพัฒนาและแก้ไขข้อบกพร่องจากภายใน VS โดยไม่มีปัญหา

(คุณอาจอ้างถึงhttp://www.blackwasp.co.uk/EventLog_3.aspxมันช่วยฉันด้วย


7

ข้อยกเว้นนี้เกิดขึ้นสำหรับฉันจากแอปคอนโซล NET ที่ทำงานเป็นงานที่กำหนดเวลาไว้และฉันพยายามทำสิ่งเดียวกันโดยทั่วไป - สร้างแหล่งที่มาของเหตุการณ์ใหม่และเขียนลงในบันทึกเหตุการณ์

ในท้ายที่สุดการตั้งค่าการอนุญาตอย่างเต็มรูปแบบสำหรับผู้ใช้ที่งานกำลังทำงานโดยใช้คีย์ต่อไปนี้ได้ทำการหลอกลวงสำหรับฉัน:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Application
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Security
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog

3
คุณบันทึกวันของฉัน BTW การอนุญาตการอ่านเพียงพอแล้วeventlog\Applicationและeventlog\Security; ต้องใช้การควบคุมแบบเต็มในeventlogรูทเท่านั้น
Ruud Helderman

6

ฉันลองเกือบทุกอย่างที่นี่เพื่อแก้ปัญหานี้ ... ฉันแบ่งปันคำตอบที่ช่วยฉันได้ที่นี่:

อีกวิธีหนึ่งในการแก้ไขปัญหา:

  • ในคอนโซล IIS ให้ไปที่กลุ่มแอปพลิเคชันที่จัดการไซต์ของคุณและจดบันทึกข้อมูลประจำตัวที่เรียกใช้ (โดยปกติคือ Network Service)
  • ตรวจสอบให้แน่ใจว่าข้อมูลประจำตัวนี้สามารถอ่าน KEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Eventlog (คลิกขวาที่การอนุญาต)
  • ตอนนี้เปลี่ยนรหัสประจำตัวของพูลโปรแกรมประยุกต์นี้เป็น Local System, Apply และเปลี่ยนกลับไปเป็น Network Service

ข้อมูลประจำตัวจะถูกโหลดใหม่และเข้าถึง EventLog ได้

ในhttp://geekswithblogs.net/timh/archive/2005/10/05/56029.aspxขอบคุณ Michael Freidgeim


การเปลี่ยนแอพจาก "ApplicationPoolIdentity" เป็น "LocalSystem" แก้ปัญหาการสร้าง / อ่านบันทึกเหตุการณ์สำหรับฉัน
majestzim

4

ฉันพบปัญหาเดียวกัน แต่ฉันต้องเพิ่มขึ้นหนึ่งระดับและให้สิทธิ์การเข้าถึงทุกคนแก่ HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ EventLog \ key แทนการลงสู่ความปลอดภัยซึ่งทำให้ฉันหมดปัญหา


1
ลองตั้งค่าแอพพลิเคชั่นให้เรียกใช้เป็น LocalSystem เพื่อสร้างคีย์รีจิสทรีจากนั้นคุณสามารถเปลี่ยนกลับเป็น NetworkService ได้ในภายหลัง
demoncodemonkey

4

ปัญหาเดียวกันใน Windows 7 64 บิต เรียกใช้ในฐานะผู้ดูแลระบบแก้ไขปัญหา


4

ต้องสร้างคีย์ใหม่พร้อมชื่อแหล่งที่มาภายใต้ HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ eventlog \ Application ใน regEdit เมื่อคุณใช้System.Diagnostics.EventLog.WriteEntry ("SourceName", "ErrorMessage", EventLogEntryType.Error);

ดังนั้นโดยทั่วไปผู้ใช้ของคุณไม่ได้รับอนุญาตให้สร้างคีย์ สามารถทำสิ่งต่อไปนี้ขึ้นอยู่กับผู้ใช้ที่คุณใช้จากค่า Identity ในการตั้งค่า Application Pool Advanced:

  1. เรียกใช้ RegEdit แล้วไปที่HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ eventlog
  2. คลิกขวาที่ปุ่ม EventLog และเลือกสิทธิ์ ... ตัวเลือก 3. เพิ่มผู้ใช้ของคุณด้วยการควบคุมการเข้าถึงแบบเต็ม

    - หากคุณใช้"NetworkService" ให้เพิ่มผู้ใช้ NETWORK SERVICE

    - ถ้าคุณใช้ "ApplicationPoolIdentity" ให้เพิ่ม IIS APPPOL {ชื่อกลุ่มแอพของคุณ} (ใช้ตำแหน่งเครื่องในเครื่องเมื่อค้นหาผู้ใช้)

    - ถ้าคุณใช้"LocalSystem"ตรวจสอบให้แน่ใจว่าผู้ใช้มีสิทธิ์ผู้ดูแลระบบ ไม่แนะนำสำหรับช่องโหว่

  3. ทำซ้ำขั้นตอนที่ 1 ถึง 3 สำหรับHKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ eventlog \ Security

สำหรับการดีบักด้วย Visual Studio ฉันใช้ "NetworkService" (เป็นผู้ใช้ ASP.NET) และเมื่อไซต์ถูกเผยแพร่ฉันใช้ "AppicationPoolIdentity"


3

FYI ... ปัญหาของฉันคือการเลือก "Local Service" โดยไม่ได้ตั้งใจเป็นบัญชีเกี่ยวกับคุณสมบัติของ ProcessInstaller แทนที่จะเป็น "Local System" เพียงแค่พูดถึงสำหรับคนอื่น ๆ ที่ติดตามการสอนแบบ MSDN เนื่องจากการเลือก Local Service แสดงให้เห็นก่อนและฉันไม่ได้ใส่ใจอย่างใกล้ชิด ....


3

ดูเหมือนจะเป็นทางออกที่ชัดเจนที่เห็นได้ชัดว่าฉันยังไม่เห็นข้อเสียอย่างน้อยที่ไม่ได้รับสิทธิ์ในการดูแลเพื่อสร้างแหล่งเหตุการณ์ของคุณเอง: ใช้ที่มีอยู่แล้ว

สองสิ่งที่ฉันเริ่มใช้คือ ".Net Runtime" และ "Application Error" ซึ่งทั้งคู่ดูเหมือนว่าจะมีอยู่ในเครื่องส่วนใหญ่

ข้อเสียเปรียบหลักคือการไม่สามารถจัดกลุ่มตามเหตุการณ์นั้นและคุณอาจไม่มีรหัสเหตุการณ์ที่เกี่ยวข้องซึ่งหมายความว่ารายการบันทึกอาจถูกนำหน้าด้วยบางสิ่งบางอย่างที่มีผลต่อการ "คำอธิบายสำหรับรหัสเหตุการณ์ 0 จากแหล่ง. Net ไม่พบรันไทม์ .... "ถ้าคุณไม่ใส่มัน แต่บันทึกจะเข้าสู่ระบบและเอาต์พุตจะดูสมเหตุสมผล

รหัสผลลัพธ์ท้ายสุดดูเหมือน:

EventLog.WriteEntry(
    ".Net Runtime", 
    "Some message text here, maybe an exception you want to log",
    EventLogEntryType.Error
    );

แน่นอนเนื่องจากมีโอกาสที่คุณจะอยู่ในเครื่องที่ไม่มีแหล่งที่มาของเหตุการณ์ไม่ว่าจะด้วยเหตุผลใดก็ตามคุณอาจต้องการtry {} catch{}ปิดล้อมในกรณีที่มันล้มเหลวและทำให้สิ่งเลวร้ายลง แต่เหตุการณ์ตอนนี้สามารถบันทึกได้แล้ว


2

ฉันไม่ได้ทำงานกับ IIS แต่ฉันมีแอปพลิเคชันที่แสดงข้อผิดพลาดเดียวกันในกล่อง 2K8 มันใช้งานได้ดีบนกล่อง 2K3 ไปคิด

ความละเอียดของฉันคือ "เรียกใช้ในฐานะผู้ดูแลระบบ" เพื่อให้สิทธิ์ในการยกระดับแอปพลิเคชันและทุกอย่างทำงานได้อย่างมีความสุข ฉันหวังว่าสิ่งนี้จะช่วยพาคุณไปในทิศทางที่ถูกต้อง

Windows 2008 เป็นสิทธิ์ / การอนุญาต / การยกระดับความเป็นจริงแตกต่างจาก Windows 2003, Gar


2

สวัสดีฉันพบปัญหาเดียวกันเมื่อฉันพัฒนาแอปพลิเคชั่นและต้องการติดตั้งบนพีซีระยะไกลฉันแก้ไขโดยทำสิ่งต่อไปนี้:

1) ไปที่รีจิสทรีของคุณค้นหา: HKLM \ System \ CurrentControlSet \ Services \ EventLog \ Application (??? YOUR_SERVICE_OR_APP_NAME ???)

โปรดทราบว่า "(??? YOUR_SERVICE_OR_APP_NAME ???)" เป็นชื่อบริการแอปพลิเคชันของคุณตามที่คุณกำหนดไว้เมื่อคุณสร้างการใช้งาน. NET ของคุณตัวอย่างเช่นหากคุณตั้งชื่อแอปพลิเคชันใหม่ของคุณ "My new App" คีย์จะเป็น: HKLM \ System \ CurrentControlSet \ Services \ EventLog \ Application \ My แอปใหม่

Note2: ขึ้นอยู่กับบันทึกเหตุการณ์ที่คุณกำลังเขียนคุณอาจพบในกล่อง DEV ของคุณ \ Application \ (ดังที่ระบุไว้ด้านบน) หรือ (\ System) หรือ (\ Security) ขึ้นอยู่กับเหตุการณ์ที่แอปพลิเคชันของคุณเขียน , (\ Application) ควรจะปรับอยู่ตลอดเวลา

2) เป็นกุญแจสำคัญข้างต้นจากเมนู; เลือก "ไฟล์" -> "ส่งออก" จากนั้นบันทึกไฟล์ (หมายเหตุ: สิ่งนี้จะสร้างการตั้งค่ารีจิสทรีที่จำเป็นของคุณเมื่อแอปพลิเคชันจำเป็นต้องเข้าถึงคีย์นี้เพื่อเขียนลงใน Event Viewer) ไฟล์ใหม่จะเป็นไฟล์. REG เพื่อการโต้แย้งเรียกมันว่า "My New App.REG "

3) เมื่อปรับใช้กับ PRODuction ปรึกษาผู้ดูแลระบบของเซิร์ฟเวอร์ (Server) มอบไฟล์ "My New App.REG" พร้อมกับแอปพลิเคชันและขอให้ SA ติดตั้งไฟล์ REG นี้เมื่อทำเสร็จแล้ว (ในฐานะผู้ดูแลระบบ) สร้างรหัสสำหรับใบสมัครของคุณ

4) เรียกใช้แอปพลิเคชันของคุณไม่จำเป็นต้องเข้าถึงสิ่งอื่นใดนอกจากคีย์นี้

ปัญหาควรได้รับการแก้ไขในตอนนี้

สาเหตุ:

เมื่อพัฒนาแอปพลิเคชันที่เขียนอะไรลงใน EventLog มันจะต้องมีคีย์สำหรับมันภายใต้รีจิสทรี Eventlog หากไม่พบคีย์นี้มันจะพยายามสร้างมันขึ้นมาซึ่งจะล้มเหลวเนื่องจากไม่มีสิทธิ์ในการทำเช่นนั้น กระบวนการข้างต้นคล้ายกับการปรับใช้แอปพลิเคชั่น (ด้วยตนเอง) ในขณะที่เรากำลังสร้างมันขึ้นมาเองและไม่ต้องปวดหัวเพราะคุณไม่ได้ปรับแต่งรีจิสตรีด้วยการเพิ่มการอนุญาตให้กับทุกคน

ฉันหวังว่านี่จะช่วยแก้ปัญหาได้


2

แม้ว่าคำตอบของตัวติดตั้งจะเป็นคำตอบที่ดี แต่ก็ไม่ได้เป็นจริงเสมอไปเมื่อต้องรับมือกับซอฟต์แวร์ที่คุณไม่ได้เขียน คำตอบง่ายๆคือการสร้างบันทึกและแหล่งเหตุการณ์โดยใช้คำสั่ง PowerShell New-EventLog ( http://technet.microsoft.com/en-us/library/hh849768.aspx )

เรียกใช้ PowerShell ในฐานะผู้ดูแลระบบและเรียกใช้คำสั่งต่อไปนี้เพื่อเปลี่ยนชื่อบันทึกและแหล่งที่คุณต้องการ

ใหม่ - EventLog - ชื่อแอปพลิเคชัน -แหล่งTFSAggregator

ฉันใช้มันเพื่อแก้ไขEvent Log Exception เมื่อ Aggregator เรียกใช้ปัญหาจาก codeplex


1

มีปัญหาคล้ายกันกับเซิร์ฟเวอร์ 2008 ทั้งหมดของเรา บันทึกความปลอดภัยหยุดทำงานพร้อมกันเนื่องจาก GPO ที่นำกลุ่มผู้ใช้ที่ผ่านการรับรองความถูกต้องแล้วและอ่านสิทธิ์จากคีย์HKLM\System\CurrentControlSet\Services\EventLog\security

การนำกลับมาใช้ตามคำแนะนำของ Microsoft แก้ไขปัญหา ฉันสงสัยว่าการให้ผู้ใช้ที่ผ่านการรับรองความถูกต้องอ่านในระดับที่สูงขึ้นจะแก้ไขปัญหาของคุณได้เช่นกัน


1

ฉันตีปัญหาที่คล้ายกัน - ในกรณีของฉันมาที่มีอยู่<, >ตัวละคร เครื่อง 64 บิตกำลังใช้ฐานคู่ใหม่ - ฉันต้องการพูดและฐานอักขระเหล่านี้ (ตั้งค่าจากสตริง) สร้าง xml ที่ไม่ถูกต้องซึ่งทำให้เกิดข้อยกเว้น เนื้อหานี้ควรพิจารณาปัญหาของ Microsoft - ไม่จัดการที่มา (ชื่อ / สตริง) อย่างถูกต้อง


1

การแก้ปัญหาง่ายมาก - รันแอปพลิเคชัน Visual Studio ในโหมดผู้ดูแลระบบ!


เมื่อการแก้ไขปัญหาใน VS และมีข้อผิดพลาดนี้นี้ได้แก้ไขปัญหาให้ฉัน
wruckie

ข้อผิดพลาดนี้จะเกิดขึ้นเนื่องจากไม่ใช่ VS ที่เรียกใช้การโทรนี้เป็นแอปพลิเคชันที่น่าจะทำงานภายใต้บริบทความปลอดภัยที่แตกต่างกัน
CodeMonkey1313

0

แอปของฉันติดตั้งบนเว็บเซิร์ฟเวอร์ของลูกค้า แทนที่จะเล่นซอกับสิทธิ์บริการเครือข่ายและรีจิสทรีฉันเลือกที่จะตรวจสอบSourceExistsและเรียกใช้CreateEventSourceในโปรแกรมติดตั้งของฉัน

ฉันยังได้เพิ่มลอง / รับรอบlog.source = "xx"ในแอปเพื่อตั้งเป็นแหล่งที่รู้จักถ้าแหล่งเหตุการณ์ของฉันไม่ได้ถูกสร้างขึ้น (สิ่งนี้จะเกิดขึ้นเมื่อฉันเปลี่ยนเป็น. dll แทนที่จะติดตั้งใหม่)



-1

ฉันมีปัญหานี้เมื่อเรียกใช้แอพภายใน VS สิ่งที่ฉันต้องทำก็คือเรียกใช้โปรแกรมในฐานะผู้ดูแลระบบหนึ่งครั้งจากนั้นฉันก็สามารถเรียกใช้จากภายใน VS

หากต้องการเรียกใช้ในฐานะผู้ดูแลระบบเพียงนำทางไปยังโฟลเดอร์ดีบั๊กใน windows explorer คลิกขวาที่โปรแกรมแล้วเลือก Run as administrator


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.