Deploying a C# app that uses Microsoft.Ink.dll - c#

I have a legacy app that captures signatures. It uses Microsoft.Ink.dll that came from a Windows Tablet SDK. I am maintaining the app on Windows 7 VS 2010 and it runs fine on my box. When I deploy the app to Windows Server 2003 the app fails with the following error:
Exception during StringFormat: Index (zero based) must be greater than or equal to zero and less than the size of the argument list. Datapump error on interface Risk Assessment Signatures: Retrieving the COM class factory for component with CLSID {937C1A34-151D-4610-9CA6-A8CC9BDB5D83} failed due to the following error: 80040154.
Regsvr32 on the dll fails.
I assume that this is because related dll's are missing.
Is there any way to delete the old ink dll and use a more modern dll that I can properly deploy? If not what is the best way to deploy this app?

Related

Creating instance of the COM component with CLSID {..} from the IClassFactory failed due to the following error 800a0005 CTL_E_ILLEGALFUNCTIONCALL

My web API (c# .net 4.7..), hosted on IIS (Windows 10), in order to run properly, requires a piece of software installed on the PC where the IIS is. This piece of software is written in VB and it needs to be running in order for the web-API to start up properly.
The web API is referencing some VB functionality via interop and COM registered dlls.
In Task-manager, i observe that IIS\worker process instead of referencing my running VB6 process, starts a new instance of the VB software (but not properly - and some variables are not loaded in this second instance - i assume this) hence i get the following error:
Creating an instance of the COM component with CLSID {...} from the IClassFactory failed due to the following error: 800a0005 Exception from HRESULT: 0x800A0005 (CTL_E_ILLEGALFUNCTIONCALL).
I have configured IIS and the app pool identity and authentication so that IIS/worker process is starting as the same user as the VB software is run as (both elevated).
I am not sure on how to force the w3w worker process to see the already running VB exe and prevent it from running a new instance of it.
When I am developing in visual studio 2019, and the web API is run via IIS express, everything works fine.
Thank you

ASMX to COM call in 64 bit Server

I am trying to call the COM library method(COM interopablity) from ASMX webservice hosted in IIS 8.5 & Windows Server 2012 64 bit server. But the call doesnt respond. I have done the following changes to ensure we are doing the right setup
1. Enable 32 bit application = true for application pool setup
2. Registered the COM in the following locations
C:\Windows\System32 & C:\Windows\SysWoW64
3. Tried compile the webservice project to target X86 configuration
4. Changed the execution timeout for web service to 10 mins
5. Did setup application pool identity which worked for my windows application
But none of the above works.
Just to verify .Net and COM communication, I have created the windows
application to call the same method and it works when I compile the
project in X86 platform.
If I compile the windows application to target platform to Any CPU, I
get the same issue like calling it via ASMX web service. Its not
responding to the call.
Finaly, It looks like it is working for windows application target x86
platform. But no idea, why it is not working from asmx service when I
set Enable 32 bit application.
Could you help me to identify what could be the wrong with ASMX to COM call?
Referenced:
Error 80040154 (Class not registered exception) when initializing VCProjectEngineObject (Microsoft.VisualStudio.VCProjectEngine.dll)
How to repair COMException error 80040154?
Note: I was getting COM exception 80040154 error when COM was not installed on C:\Windows\System32 folder. Now not getting this error but call not responds.
Server is 64bit
Depending on the COM server you invoke, you may need to specify an Identity for an Application Pool if the COM application requires a user profile, or check the app pool's Load User Profile property. (I needed this to run ABCpdf, for example)

COM exception on Office Automation - Windows Service C#

I have developed a windows service that would read doc / docx files and replace values based on database records and convert the replaced document as PDF.
Used Microsoft Office Interop DLL for the conversion. The service is hosted in two different machines ( Win Server 2008 R2 Enterprise - 64 Bit ). I had to
set the Identity as Interactive User in DCOM settings to solve the exception :
Retrieving the COM class factory for component with CLSID {000209FF-0000-0000-C000-000000000046}failed due to the following error: 8000401a.
Initially I couldn't not find the DCOM entry for Microsoft Windows Document. So I had to change some settings in the registry following this link. This got me working in one system ( the service working fine). However, in another system, the service threw an exception Attempted to read or write protected memory. This is often an indication that other memory is corrupt on WorkDocument.ClearFormatting() code.
To overcome that I had changed the build properties form "Any CPU" to "x86". The service worked fine for some times but it just started to throw the exception (Retrieving the COM class factory for component with CLSID {000209FF-0000-0000-C000-000000000046} failed due to the following error: 8000401a) again. I could not figure out when the service starts throwing this exception. If I restart the service it works normal but not for too long.
I know using MS interop is not recommended for services. But i came to know about this issue only after the complete development of the service as I had no problems running the program as windows application on my system for testing purposes.
Tried with google and have even solved the issue but the solution seems to be a temporary one for one server and the other seems to work fine. Kindly guide me to overcome the situation.
Thanks

Excel Interop error

I'm having a problem with running an application I made on another computer. This is the error message I'm getting:
System.Runtime.InteropServices.COMException (0x80040154): Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80040154
I searched it on Google, and found out that it means that I need to register that specific component in regedit, but I don't know how to do it, or where to find that component, so please help me.
I used C# in VS 2010 to make my application. One more thing, I don't know if it matters - I installed this application on 3 different computers, and this is the only one that gives me that error - it is a HP all-in-One computer.
for component with CLSID {00024500-0000-0000-C000-000000000046}
That's the guid for Microsoft Excel's Application class. Two very basic reasons you'll get this error:
Microsoft Office is not installed on that machine
The machine has a 64-bit operating system and you installed the 32-bit version of Office. You have to force your program to run in 32-bit mode. Project + Properties, Build tab, change the Platform target setting to x86
The machine has a 64-bit operating system and you installed the 64-bit version of Office 2010. Same fix as above but now you have to make sure to select the AnyCPU target.

Access COM DLL using VS 2008 on Windows 7 64 bit

I am using Windows 7 64 bit OS and VS 2008 SP1 as development environment.
One of the console application uses a COM component. When I try to create an instance of a class from the COM component, I got following error:
Creating an instance of the COM component with CLSID {CE92C3B9-9A93-40E1-85AB-6A49170AEF7F} from the IClassFactory failed due to the following error: 80010105.
I assume that you're building an managed .NET application from the fact that you added a C# tag to the question.
Managed applications are started in the as a 64-bit process unless you explicitly define it to be launched as a 32 bit application through ProjectProperties - Build - Platform Target.
If the COM component you're loading (in-process?) comes from a 32-bit native DLL then the instantiation will fail since you obviously cannot mix CPU models in 1 process.

Categories

Resources