webForumDet fria alternativet

UnauthroizedAccessException när man skapar Word.Application i C#

.NET

7 svar · 257 visningar · startad av a95johjo

Medlem sedan feb. 200326 inlägg
Frågan#1

Jag har en c#-applikation (alltså ej asp.net) som använder Word 2000 genom automation.
Funkar utmärkt på flera datorer utom en (windows 2000 server).
Den har funkar tidigare men nu får jag ibland "Access denied, System.UnauthorizedAccessException" på följande kodrad:

WordApp app = new Word.Application();

Nån som har nån idé ? Hittar tusen exempel om ASP.NET men inte nåt om samma problem för en vanlig windows-användare.

Medlem sedan juni 20022 599 inlägg
#2

Om samma användare/konto på samma maskin kör en VBS-fil med:

set x = createobject("Word.Application")
x.visible = true
x.quit

fungerar det då utan problem?

Medlem sedan dec. 19991 072 inlägg
#3

Jag hade ett liknande problem när jag skulle köra Excel ifrån ASP.NET. Jag var då tvungen att köra "DCOMCNFG" och därifrån sätta rättigheterna på Excel gentemot ASP-kontot. Det kanske är nåt för dig?

http://www.asp101.com/articles/jayram/exceldotnet/default.asp

Raderna vid: "Sample - Excel Reporting Demo":

Download the sample code (362 KB) and extract the sample files to the local machine.
Using IIS MMC, Create virtual directory 'ExcelReportDemo' and map it to 'ExcelReportDemo' folder from the extracted files above.
From command prompt type "dcomcnfg.exe" [DCOM configuration tool]
You will see 'Distributed COM Configuration Properties' window.
On 'Applications' tab from 'Applications' list box, double click on 'Microsoft Excel Application'
Select 'Security' tab
Select 'Use Custom Access Permission' radio button option and click on 'Edit' button.
On the 'Registry Value Permissions' window make sure to add 'ASPNET' local user OR user running ASP.NET process on local machine.
Select OK after adding ASPNET user above
On the same tab (Security) select 'Use Custom Launch Permissions' and click on 'Edit'
On the 'Registry Value Permissions' window make sure to add 'ASPNET' local user OR user running ASP.NET process on local machine.

Medlem sedan feb. 200326 inlägg
#4

niko, nej det funkar inte, "Object Required" på x.visible dvs x blir inte en Word.Application.... Sen provade jag igen 5 minuter senare och då fungerar det. Jag kör ju detta på en terminal server, kan det påverka tro?

Kanske ska installera om Word eller nåt...

Medlem sedan feb. 200326 inlägg
#5

om jag däremot gör t ex CreateObject("Word.Document") så får jag alltid ett dokument tillbaks... Så det är nåt med Application som ballar ur.

Medlem sedan feb. 200326 inlägg
#6

Dessutom :-) så verkar det funka varje gång om jag gör följande:

Set x = CreateObject("Word.Document")
Set x = CreateObject("Word.Application")
x.Visible = True
x.Quit

Mycket märkligt....

Ditt exempel krashar alltid första gången, så dödar jag Word och försöker igen och då funkar det.

Medlem sedan juni 20022 599 inlägg
#7

a95johjo skrev:

Sen provade jag igen 5 minuter senare och då fungerar det.

Ja, det är ju värsta sortens fel när det funkar ibland. En gissning kan vara att det beror på nåt som Word i sin tur ibland (men inte alltid) gör: försöker skapa en temp-fil, skriva till registret .. Du kunde ju kolla DCOM-inställningarna via "DCOMCNFG.exe" som fredrik föreslår, även om det inte borde förklara varför det funkar ibland.

a95johjo skrev:

Jag kör ju detta på en terminal server, kan det påverka tro?

Mycket möjligt, har aldrig provat. Hur ser det ut? Din applikation + Word ligger på en 2000 server och problemet uppstår på alla maskiner som loggar på en session oavsett vilket konto de kör på? Även om de kör som Administrator? Även om du kör helt lokalt (utan terminal server-session)?

a95johjo skrev:

om jag däremot gör t ex CreateObject("Word.Document") så får jag alltid ett dokument tillbaks...

Återigen: Kolla inställningarna för "Word.Application" med "DCOMCNFG.exe".

a95johjo skrev:

så verkar det funka varje gång om jag gör följande:

Set x = CreateObject("Word.Document")
Set x = CreateObject("Word.Application")

Nu är det ingen snygg lösning på problemet, men i "worst-case" kunde du ju utnyttja det i din .NET-applikation (om det funkar likadant där)?

Medlem sedan feb. 200326 inlägg
#8

Funkade inte från C# heller... Nu har jag kommit lite närmare, det verkar som om det är hörochhäpna Oracle OLEDB-kopplingen som får det att balla ur. Den Exception som kommer innehåller en referens till OraOleDb. Fattar inte vad Oracle skulle ha med Word att göra men när jag kör mot SQL Server så funkar det.
Skumt!!

266 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)