IIS7.5 Excel printing not working when run from server - vba

I'm having trouble generating a PDF-file with PDFCreator from Excel macro (using VB.NET 3.5 and Interop).
Through Windows login as the domain user I can run the macro directly from Excel and everything works fine (a pdf file is printed and saved), but when published and run as the same user from server there is no printer found.
In the macro I know this can be solved by setting Application.ActivePrinter ("PDFCreator on Ne00:" in my case), which again works when I run directly from Excel but not from server. So what I wonder is how to make it possible to set ActivePrinter when running on server?
It worked with previous IIS version on the server (6.0). I have tried giving the domain user access permissions (e.g. in DCOMCNFG), the PDFCreator is set up correctly and accessible, don't really know how to approach this.

Using Office Interop from server-like scenarios (IIS/ASP.NET/Windows Service...) is NOT supported by MS - see http://support.microsoft.com/default.aspx?scid=kb;EN-US;q257757#kb2
Another point is that since windows vista there have been several security-related changed which prevent doing any "desktop-like" things (for example printing...) from a Windows Service...
Alternative to Interop:
To create PDF from Excel file there are several libraries out there which do not use Excel and work fine in server-scenarios - like Flexcel, Aspose.Cells, SpreadsheetGear...

It works even in IIS8 also.
Give Microsoft Excel Application sufficient Permission from DcomConfig (Eg-IIS_IUSRS,Network Services etc)
take care of impersonate user id and password provided In Web.xml. do not make it true if not necessary. it worked for me when i removed this.

Related

Automating MS Word in Server 2012 R2

Firstly, please don't reply with the generic advice not to automate Word on a server or a link to the MS web page on "how to automate word on a server if you really must". I am aware of this.
I have a process which runs as a Windows service and uses .Net OLE interop to automate Office (mostly just Open and SaveAs). This code has worked reliably for 8 years on literally hundreds of servers using many combinations of Windows and Office versions, both 32 and 64 bit, so I am happy that the mechanism is reliable. So far...
With Server 2012 R2, it works with PowerPoint and Excel but fails trying to open a word document:
System.Runtime.InteropServices.COMException (0x800A16A0):
The file appears to be corrupted.
at Microsoft.Office.Interop.Word.Documents.Open...
My observations so far which may or may not be relevant:
fails on all documents
works fine in Windows 8.1
the same problem has happened both on a customer site and in our test environment, so is unlikely to be purely environmental
my application is using .Net 3.5
the code is linked against the 2003 Interop assemblies (obviously later office versions are supported by assembly binding redirection)
we have tried it with office 2013 both 32 and 64 bit with the same results, but not tried earlier versions of office
it fails whether the service is running as LocalSystem or as a standard user account
if we run the service process in the foreground (i.e. literally double-clicking on the executable) the problem does not happen
Obviously I still have things to investigate but interested to hear if anyone else has seen this specific problem even if you haven't solved it. Please note there are many difficulties and problems with office automation so unless your symptoms are very similar to mine, you probably don't have the same problem.
Same issues here but got this fully resolved now.
I have a Word 2013 in combination with Windows 2012 R2 Server running in a service process which does everything I want without the need of a interactive session to be started. I use this to convert documents to PDF files. Inside the Windows service I host a WCF service.
Create folders: (replace System32 with Syswow64 depending of you use x86 or x64 bit edition)
C:\Windows\System32\config\systemprofile\AppData\Local\Microsoft\Windows\INetCac‌he
C:\Windows\System32\config\systemprofile\Desktop
Last and most important step!
Start - run - dcomcnfg.exe
Open properties -> Component Services - DCOM Config - Microsoft Word 97 - 2003 Document (Note that the version is not mentioned here but that does not matter Office 2013 will use this as DCOM config)
Open tab Identity. Configure the run as a the local Administrator account. I did some tests Word 2013 will work just fine even if no interactive session is started for the user.
We(My Company) are currently facing the same problem, it is pretty much a carbon copy of your problem. We have completed extensive testing around this area and I am now in talks with MS support engineer trying to find a work around.
Unfortunately this is something they don't want us doing, I think they have tightened security on the Windows Server 2012 to stop people from doing this.
What we have tried which should help you:
Server 2012 | Word 2007 | Failed
Server 2012 | Word 2010 | Failed
Server 2012 | Word 2013 | Failed
Client 8.1 | Word 2013 | Failed
Our problem stems from the fact we are running word with a user who isn't associated with the LOCAL system user(i.e. the type of user you have when you are logged into the machine) Windows will just not allow this to happen anymore.
Myself and the MS Engineer are working on "Fooling" windows into thinking it is running Word as a local service, however the MS Engineer said it was a long shot at best and so far everything we have tried has resulted in failure. It's not looking good.
Sorry I don't have an answer for you, but I suppose its good know you are not alone?
I had the same problem with MsOffice 2010 (32bits) and Windows Server 2012R2 (64bits). Word, Excel, Powerpoint don't work with localAdmin.
I created the folder C:\Windows\System32\config\systemprofile\AppData\Local\Microsoft\Windows\INetCac‌​he like Andy did and it now work perfectly !
Thanks Andy :)
My service use MS Word for data merging and concatenations functions.
I'm using Word 2016 on Windows Server 2012 R2 .
My log says that Word is opened but when the document is opened is throwed an error.
I've first created all the 4 folder suggested:
C:\Windows\System32\config\systemprofile\AppData\Local\Microsoft\Windows\INetCac‌​he
C:\Windows\System32\config\systemprofile\Desktop
C:\Windows\SysWOW64\config\systemprofile\AppData\Local\Microsoft\Windows\INetCac‌​he
C:\Windows\SysWOW64\config\systemprofile\Desktop
Only after creating the last directory the problem was solved.
I've not used DCOM config; my application use an user account with administration priviledges; there was no need to use LocalSystem account with "interaction with desktop" options.
Thank you.
We had a working solution for this for quite some time. However the solution broke when we tried to install it on a fully updated 2012 RTM R2 Server. On a 2016 Server we don't see this issue.
In order to make it work again on Windows 2012 R2 Server and also in a none interactive desktop environment:
Follow these steps!:
Actions to solve the issue on a Windows 2012 Sever R2 which is fully updated by Windows update:
Start - Run - mmc comexp.msc /32
Expand: Component Services – Computers – My Computer – DCOM Config
Search for: Microsoft Word 97 – 2003 Document
RMC – Properties – Go to tab: Identity
Set from “The launching user” to “This user”.
Use a “local Administrator account” which has once singed in to the server machine and has opened Word at least once in an interactive desktop.
Last step: REBOOT THE SERVER! And use a new document name to test your solution again.
Like known and said in the other answers these folder need to be created and accessible by the calling user (local system) normally or the user you configure in the prev steps.
C:\Windows\System32\config\systemprofile\AppData\Local\Microsoft\Windows\INetCac‌he C:\Windows\System32\config\systemprofile\Desktop
C:\Windows\SysWow64\config\systemprofile\AppData\Local\Microsoft\Windows\INetCac‌he C:\Windows\SysWow64\config\systemprofile\Desktop
Thanks for all the help OP and contributors. After creating the INetCache folder it worked out for me. I have done the following to get everything working without an active session(WS2012 R2 / MS Office 2013 64x):
Create a local admin user and log in to setup any printers(printing to file) as well as default word options.
Point the DCOM config identity to the local admin user created.
Create the following file :C:\Windows\SysWOW64\config\systemprofile\AppData\Local\Microsoft\Windows\INetCac‌​he
For some machines you need to run " mmc comexp.msc /32 " to set the DCOM setting for MS Word. I found that we needed to do this when 32 bit version of Word was installed only.
I've just been going nuts to sort this and have tried numerous solutions. I finally resolved this by changing the Identity to "This User". I then used the account that my app pool ran under and also had to add this user the "Administrators" group..
Phew... hope this helps someone too.

Print PDF from Navision Application Server

I have problem printing reports to PDF through bullzip from Navision Application Server (1) if user is not in Local Admin group (2). Only under both conditions.
In Nav code I'm doing the following: init bullzip automation object (set all parameters to suppress GUI), run report to print document to virtual bullzip printer, catch output file. Thats it. Straight as a rail.
I have two environments: Windows Server 2008 and Windows 7 (different versions of Nav, but this is changing nothing). On Windows 7 it just do nothing (but works if user is admin). On server I can see error in Event Log (translated to English)
Faulting application gui.exe, version 9.8.0.1599, time stamp 0x517126dc, faulting module USER32.dll, version 6.0.6002.18541, time stamp 0x4ec3e39f, exception code 0xc0000142, fault offset 0x0006f52f, the process ID 0x3bc, application start time 0x01ce562238369fa9.
Gui.exe is a part of bullzip.
If I run the same code from Nav Classic Client, or from the same NAS launched in command line, or under local administrator account, or if i put the NAS user in local admin group - it works just fine.
To solve this problem i need to find out one of two and how to fix it:
What is the difference between local admin and regular user that could cause application to crash in non-interactive mode (service) under regular user account.
What is the difference in running NAS as service and as command line that could cause application to crash when run as service.
What I've tried so far: extend non-interactive desktop heap, give user all local privileges that admin have in gpedit. Not works. Don't know direction for further digging.
Any alternative free pdf printers advices are welcome.
This question is still actual. Though I've managed to setup PDF printing with PDFCreator. The tough part was to let several different NAS to print simultaneously. And now the setup have a bottleneck - PDFCreator's printing queue. With bullzip automations it could be avoided.
We've had some cases where third party DLL's have crashed within NAV due to permission restrictions.
The only effective way we could narrow down the files that it was trying to access was through using Process Monitor to try narrow down what was causing permission issues.
We found a folder within System32 to do with the System's Network Profile that some DLLs use. On that note, NAS's and such should be run under a domain account.
I think re-installing the application will do that,
Just make sure you are uninstalling each bullzip and ghost script,
Now Ghost script is tricky thing, if you are installing 32 bit over 64 then you are having problem,
refer this download link download appropriate version, install it,
and then install bullzip, after downloading new version from here
this will do..
then also if any problem(if you are using application for automation, you require new com object..) refer Forum, that explains most of application interface problems..
where you need to use public class PdfSettings with namespace bioPdf.
I hope this will help ..

Why might COM automation of Word from within a console application run as a scheduled task work on my development machine but hang on another?

I have a console application that uses COM automation to manipulate .DOC and .DOCX files in Word 2010. This works in a scheduled task for a not logged in user account on two development machine (running 32 bit Windows Server 2003) but not on another machine (running 64 bit Windows Server 2003). It does run on that machine if run from the command line by the same user account when logged in (so I don’t think it’s a 32/64 bit issue).
The code hangs at the point it tried to open a document not when the Word application is created.
I have logged in as the user account and opened the file manually (so I don’t think it is popping up any dialog boxes).
I thought that it might be something to do with autocorrect and while looking at the proofing options noticed that the “automatically use corrections from the spelling checker” checkbox is greyed out.
I have used process monitor and could not find any file access failures for files which are on the dev machine but not on the other (Word seems to look for Normal.dot in a number of places but this file in not on the dev machine either).
I am aware that Word automation on a server is not recommended or supported by Microsoft and may be outside the terms of the license.
I am using automation as I need to manipulate files for older versions of Word.
This may be related to my other issue with automation from non logged in accounts: Why might COM automation from within a console application work on my development machine but not on another? However this case is different in that opening a file is hanging rather than creation of the application program failing.
What else should I try?

Error Trying to Save from Excel to Sharepoint Library

I am trying to save an Excel 2010 file to a Sahrepoint 2010 document library but keep getting the error:
"You can't open this location using this program. Please try a different location"
Googling this suggests enabling "Desktop Experience" on the server which I have done. All Excel services are activated.
Has anyone come across this and been able to resolve successfully? I am wondering if this is more security related but the security set-up looks fine.
Any suggestions?
Thanks
I think that there are potentially a couple of things that could solve this problem depending on your set-up.
You are right that a lot of internet advice is to enable desktop experience, but if you are not running on the server or if you have already done this then one of the suggestions below could help.
This is only for dev environments however.
If you are running on the server and trying to use your app as admin then configuring IE ESC to turn off enhanced security for Admins should help
If you are running off server and have the issue and do not want to turn off IE ESC (on the server) for users then you need to enable a mechanism to allow auto-logon, either through integrated security (i.e. you are part of the domain), accessing through an anon web-site port on your SharePoint app (set-up anon web access in SharePoint) or set up and store a WebDav link and use that as the open/save URL.
My (unconfirmed) theory is that there is some auto-login going on in the background that hinders a streamlined office integration. Most of the time, SharePoint will be set up with Kerberos (not NTLM) or be in anon mode so enabling desktop experience if running on the server will be the best first step to try.
Hope this helps.
The problem is that the full path to the file is too long.
I had this problem with a PowerPoint presentation. The full path to the file was over 275 characters. When I shortened the file name to bring the full path under 250 characters, I was able to open the file normally.

System.Data.OracleClient requires Oracle client software version 8.1.7

I have a web site that I developed on Vista using Vb.net9. It makes a connection to Oracle. for the connection I use System.Data.OracleClient. It works fine on my machine, and our test server, but it does not work on the production server. We installed the Oracle Client 11 on the server. The error is System.Data.OracleClient requires Oracle client software version 8.1.7
We've tried, making a console app that opens the connection, connection runs fine, opens, displays a message and all is well there.
Then we make a simple web form, put it in the directory of the program, just a button, opens the connection, try..catch, grabs error, same error.
The console app was running under an Administrator, web site running under iwam. Is it possible that iwam has a different path?
I've run into this error dozens of times:
Cause
Security permissions were not properly set when the Oracle client was installed on Windows with NTFS. The result of this is that content of the ORACLE_HOME directory is not visible to Authenticated Users on the machine; this causes an error while the System.Data.OracleClient is communicating with the Oracle Connectivity software from ASP.NET using Authenticated User privileges.
Solution
To fix the problem you have to give the Authenticated Users group privilege to the Oracle Home directory.
Log on to Windows as a user with Administrator privileges.
Start Windows Explorer and navigate to the ORACLE_HOME folder.
Choose properties on the ORACLE_HOME folder.
Click the Security tab of the Properties window.
Click on Authenticated Users item in the Name list.
Un-check the Read and Execute box in the Permissions list under the Allow column.
Re-check the Read and Execute box under the Allow column.
Click the Advanced button and in the Permission Entries verify that Authenticated Users are listed with permission: Read & Execute, and Apply To: This folder, subfolders and files. If not, edit that line and make sure that Apply To drop-down box is set to This folder, subfolders and files. This should already be set properly but it is important that you verify it.
Click the OK button until you close out all of the security properties windows. The cursor may present the hour glass for a few seconds as it applies the permissions you just changed to all subfolders and files.
Reboot, to assure that the changes have taken effect.
Try your application again.
The author of this post (now deleted post) suggests checking your C:\Windows\System32 folder to make sure that the oci.dll exists there. Copying in the file from the Oracle home directory solved this problem for me.
Update 1: It is possible for different users to have different path. But its not the likely problem here. There is more chance that the user that the iwam user doesn't have permission to the oracle client directory.
Update 0: Its suppose to work. Check for environment variable ( That are needed to find the oracle client and tnsnames.ora ). Also, Maybe you have a 32/64 bit issues. Also, consider using the Oracle Data Provider for .NET ( search for odp.net)
Oracle Client version 11 cannot connect to 8i databases. You will need a client in version 10 at most.
When we first moved over to Vista with Oracle 10g, we experienced this issue when we installed the Oracle client on our Vista boxes, even when we were running with admin privileges during install.
Oracle brought out a new version of the 10g client (10.2.0.3) that was Vista compatible.
I do believe that this was after 11g was released, so it is possible that there is a 'Vista compatible' version for 11g also.
Why not use this: dotConnect for Oracle (formerly known as OraDirect .NET)?
It can be configured to not require an Oracle Client at all.
We have been using this in both Windows Services and ASP.NET Web Services and it works like a charm.
For me, the issue was some plugin in my Visual Studio started forcing my application into x64 64bit mode, so the Oracle driver wasn't being found as I had Oracle 32bit installed.
So if you are having this issue, try running Visual Studio in safemode (devenv /safemode).
I could find that it was looking in SYSWOW64 for the ic.dll file by using the ProcMon app by SysInternals/Microsoft.
Update: For me it was the Telerik JustTrace product that was causing the issue, it was probably hooking in and affecting the runtime version somehow to do tracing.
Update2: It's not just JustTrace causing an issue, JustMock is causing the same processor mode issue. JustMock is easier to fix though: Click JustMock-> Disable Profiler and then my web app's oracle driver runs in the correct CPU mode. This might be fixed by Telerik in the future.