| Author | 
		  Message
		 | 
		
		  | bath | 
		  
		    
			  
				 Posted: Wed Jan 05, 2005 8:57 am    Post subject: Unable to load APPC communication program with the code erro | 
				     | 
			   
			 
		   | 
		
		
		   Apprentice
 
 Joined: 23 Nov 2004 Posts: 29
  
  | 
		  
		    
			  
				Hello All, 
 
please could someone help me? 
 
I write a small c++ service that must connect to a queue manager 
 
and put messages in the queue. 
 
But when i start my service i receive the message 
 
" Unable to load APPC communication program with the code error 126" 
 
any help will be greatly appreciated | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | kman | 
		  
		    
			  
				 Posted: Wed Jan 05, 2005 4:45 pm    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		   Partisan
 
 Joined: 21 Jan 2003 Posts: 309 Location: Kuala Lumpur, Malaysia 
  | 
		  
		    
			  
				| APPC ? That sounded like SNA problem. What platform are these? Have you tested the SNA connection if the client can reach the server? | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | bath | 
		  
		    
			  
				 Posted: Thu Jan 06, 2005 3:44 am    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		   Apprentice
 
 Joined: 23 Nov 2004 Posts: 29
  
  | 
		  
		    
			  
				thanks,
 
 i'm on windows 2000 platform. My program executes in the server machine.
 
when  I start my service , I can not connect to the Queue manager
 
and the error I received in the Event Viewer is
 
 
"The APPC communications program could not be loaded.  
 
 
The attempt to load the APPC library or procedure 'wcpic32' failed with error code 126.  
 
 
Either the library must be installed on the system or the environment changed to allow the program to locate it. 
 
  "
 
which library should I install?
 
 
any help will be appreciated
 
thanks | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | bath | 
		  
		    
			  
				 Posted: Thu Jan 06, 2005 5:33 am    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		   Apprentice
 
 Joined: 23 Nov 2004 Posts: 29
  
  | 
		  
		    
			  
				how can i test the SNA connection?
 
How do i know if my program use such connection?
 
thanks | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | jefflowrey | 
		  
		    
			  
				 Posted: Thu Jan 06, 2005 5:34 am    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		   Grand Poobah
 
 Joined: 16 Oct 2002 Posts: 19981
  
  | 
		  
		    
			  
				Ask your network administrator. _________________ I am *not* the model of the modern major general. | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | bath | 
		  
		    
			  
				 Posted: Thu Jan 06, 2005 5:52 am    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		   Apprentice
 
 Joined: 23 Nov 2004 Posts: 29
  
  | 
		  
		    
			  
				thank you jefflowrey,
 
  I will like to take this opportunity to ask another question.
 
i link my program with all these libraries:
 
 
imqb23in.Lib
 
imqb23vn.Lib
 
imqs23vn.Lib
 
imqc23in.Lib
 
imqc23vn.Lib
 
imqs23in.Lib
 
mqic32.Lib
 
mqiccb32.Lib
 
mqiccbb.Lib
 
mqm.Lib
 
mqmax.Lib
 
mqmcb32.Lib
 
mqmcbb.Lib
 
mqmcics.Lib
 
mqmcics4.Lib
 
mqmenc.Lib
 
mqmsom.Lib
 
mqmtux.Lib
 
mqmvx.Lib
 
mqmvxd.Lib
 
mqmxa.Lib
 
mqmzf.Lib
 
mqutl.LIB
 
 
I removed all the library and I just left
 
imqb23vn.Lib
 
imqs23vn.Lib
 
 
I did not have an error in the Event viewer.
 
but my service does not connect to the queue manager.
 
may be it's anothe problem.
 
 
PS: My application run in the same machine where the MQseries server is installed.
 
 
question1:
 
are  these two libraries 
 
     imqb23vn.Lib
 
     imqs23vn.Lib
 
sufficient?
 
thanks | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | clindsey | 
		  
		    
			  
				 Posted: Thu Jan 06, 2005 6:28 am    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		   Knight
 
 Joined: 12 Jul 2002 Posts: 586 Location: Dallas, Tx 
  | 
		  
		    
			  
				
   
	| Quote: | 
   
  
	
 
PS: My application run in the same machine where the MQseries server is installed. 
 
 
question1: 
 
are these two libraries 
 
imqb23vn.Lib 
 
imqs23vn.Lib 
 
sufficient? 
 
 | 
   
 
 
 
Yes.
 
 
What error do you get now?
 
 
Charlie | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | bath | 
		  
		    
			  
				 Posted: Thu Jan 06, 2005 7:11 am    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		   Apprentice
 
 Joined: 23 Nov 2004 Posts: 29
  
  | 
		  
		    
			  
				thank you,
 
  this is the code I use in my service.
 
 
 
 
#pragma once
 
using namespace System;
 
using namespace System::Collections;
 
using namespace System::ServiceProcess;
 
using namespace System::ComponentModel;
 
 
//add
 
#include "stdafx.h"
 
#using <mscorlib.dll>
 
#include <tchar.h>
 
#include <windows.h>
 
#include <conio.h>
 
#include "OSidHelper.h"
 
using namespace System;
 
using namespace System::IO;
 
//#include <string.h>
 
 
#ifndef MQ_zero
 
 #include <imqi.hpp>  //WebSphere MQ MQI
 
#endif
 
 
 
namespace MyService
 
{
 
	/// <summary> 
 
	/// Summary for MyServiceWinService
 
	/// </summary>
 
	///
 
	/// WARNING: If you change the name of this class, you will need to change the 
 
	///          'Resource File Name' property for the managed resource compiler tool 
 
	///          associated with all .resx files this class depends on.  Otherwise,
 
	///          the designers will not be able to interact properly with localized
 
	///          resources associated with this form.
 
	public __gc class MyServiceWinService : public System::ServiceProcess::ServiceBase 
 
	{
 
		 public:
 
		StreamWriter *logfile;
 
	public:
 
		MyServiceWinService()
 
		{
 
			InitializeComponent();    
 
		}
 
		/// <summary>
 
		/// Clean up any resources being used.
 
		/// </summary>
 
		void Dispose(bool disposing)
 
		{
 
			if (disposing && components)
 
			{
 
				components->Dispose();
 
			}
 
			__super::Dispose(disposing);
 
		}
 
		
 
	protected:
 
		/// <summary>
 
		/// Set things in motion so your service can do its work.
 
		/// </summary>
 
		void OnStart(String* args[])
 
		{
 
			// TODO: Add code here to start your service.
 
			 Threading::ThreadStart* threadStart = new Threading::ThreadStart(this,mainLoop);
 
            servicethread = new Threading::Thread(threadStart);			
 
            servicethread->Start();		
 
		}
 
		
 
 
 
 void mainLoop()
 
     {
 
        Diagnostics::EventLog* log;
 
		if(!Diagnostics::EventLog::SourceExists("Myservice"))
 
			Diagnostics::EventLog::CreateEventSource("Myservice","MySrviceLog");
 
 
		log = new Diagnostics::EventLog("MyserviceLog");
 
		//log->Source="MyService";
 
 
 
		
 
		logfile = new StreamWriter ("C:\\LogFile.log");
 
        
 
        CReg reg;             //helper class for registry operations
 
        loopsleep = 1000;            //milliseconds
 
        stopping = false;
 
        
 
	CString lusedatabase,lworkdir,larcdir,lwext;   //working variables used to store registry entries.
 
	CString m_msg,m_errorText,sformat, m_channel,m_mgr,m_queue;	 
 
	   
 
		ImqQueueManager mgr;             
 
        ImqQueue queue;  
 
        ImqChannel channel; 
 
        ImqMessage msg;    
 
        ImqString strToken,strParse,imq_mgr,imq_queue;
 
	   
 
		
 
     reg.GetRegKeyValue( HKEY_LOCAL_MACHINE, _T("SOFTWARE\\MQservice\\MQParametres"), _T("manager"), m_mgr);
 
     reg.GetRegKeyValue( HKEY_LOCAL_MACHINE, _T("SOFTWARE\\MQservice\\MQParametres"), _T("channel"), m_channel);
 
     reg.GetRegKeyValue( HKEY_LOCAL_MACHINE, _T("SOFTWARE\\MQservice\\MQParametres"), _T("queue"), m_queue);
 
    
 
     logmessage(m_mgr);
 
     logmessage(m_channel);
 
     logmessage(m_queue);
 
 
	 LPTSTR my_channel= new TCHAR[m_channel.GetLength()+1];
 
	 _tcscpy(my_channel,m_channel);
 
    
 
	
 
	 LPTSTR my_mgr =new TCHAR[m_mgr.GetLength()+1];
 
	 _tcscpy(my_mgr,m_mgr);
 
	 imq_mgr = ImqString((const char*)my_mgr);
 
 
	 LPTSTR my_queue =new TCHAR[m_queue.GetLength() +1];
 
	 _tcscpy(my_queue,m_queue);
 
	 imq_queue =ImqString((const char*)my_queue);
 
 
	 strParse = ImqString((const char*)my_channel);
 
 
 
	 mgr.setName(imq_mgr);	
 
	 queue.setName(imq_queue);
 
	
 
    
 
	 logmessage(CString(imq_mgr));
 
	 logmessage(CString(imq_queue));
 
	 
 
 
 
	 channel.setHeartBeatInterval(1);
 
      
 
	   //Set the channel name
 
      if (strParse.cutOut(strToken,'/')) 
 
        channel.setChannelName(strToken);
 
       logmessage(CString(strToken));
 
	  
 
 
	 //set the transport type
 
      if ( strParse.cutOut( strToken,'/')) 
 
	  {  
 
		  logmessage(CString(strToken));
 
         if ( strToken.upperCase( ) == (ImqString)"LU62")		 
 
           channel.setTransportType( MQXPT_LU62 );        
 
         if ( strToken.upperCase( ) == (ImqString)"NETBIOS")
 
           channel.setTransportType( MQXPT_NETBIOS );        
 
         if ( strToken.upperCase( ) == (ImqString)"SPX")
 
           channel.setTransportType( MQXPT_SPX );          
 
         if ( strToken.upperCase( ) == (ImqString)"TCP")
 
          channel.setTransportType( MQXPT_TCP );      
 
	   }
 
      // Establish the connection name.
 
      if ( strParse.cutOut(strToken))
 
		channel.setConnectionName( strToken );	
 
	  logmessage(CString(strToken));
 
       
 
	  //Link the channel to the queue manager
 
      mgr.setChannelReference(channel );      
 
 
	  //establish the connection
 
      if(mgr.connect())
 
	  {
 
		
 
	    logmessage("connect succeed");
 
		  
 
          queue.setConnectionReference( mgr );         
 
	  queue.setOpenOptions( MQOO_OUTPUT + MQOO_FAIL_IF_QUIESCING );
 
		
 
          queue.open();         
 
	  if (queue.completionCode()== MQCC_FAILED)
 
	  {
 
           logmessage("unable to open queue for output" );
 
           }
 
	   }else
 
	   {       
 
		 m_errorText = "connection failed with reason code" ;		
 
		 logmessage("connection failed with reason code");
 
		 logmessage(CString((TCHAR)mgr.reasonCode()));   !!can not log the error code ????
 
	   }	
 
 
 
 
 
        while (!stopping)
 
         {
 
          DirectoryInfoDemo2(lworkdir,larcdir,lwext);		 
 
          Threading::Thread::Sleep(loopsleep);
 
         }      
 
	   }
 
 
 
     void StreamWriterDemo()	
 
	 {		
 
		//Console::WriteLine("Creating C:\\TempFile.txt");
 
		 StreamWriter *sw = new StreamWriter ("C:\\TempFile.txt");
 
		 
 
		 sw->WriteLine("This is the second line");		
 
		 sw->WriteLine("This is the second line");		
 
		 sw->WriteLine("This is the third/last line");		
 
		 sw->Close();
 
	  }
 
 
 
 
 
	 void logmessage(CString s)
 
	 { 
 
		
 
	   logfile->WriteLine(s);
 
		
 
	 }
 
 
	
 
 
               /// <summary>
 
		/// Stop this service.
 
		/// </summary>
 
	void OnStop()
 
	{     
 
	 // TODO: Add code here to perform any tear-down necessary to stop your service.
 
	 logfile->Close();	
 
	}
 
    		
 
	private:
 
		/// <summary>
 
		/// Required designer variable.
 
		/// </summary>
 
		System::ComponentModel::Container *components;
 
		//add
 
		   bool stopping;
 
           int loopsleep;              //milliseconds
 
           Threading::Thread* servicethread;
 
		 //add
 
 
 
		/// <summary> 
 
		/// Required method for Designer support - do not modify 
 
		/// the contents of this method with the code editor.
 
		/// </summary>	
 
		void InitializeComponent(void)
 
		{
 
			this->components = new System::ComponentModel::Container();
 
			this->CanStop = true;
 
			this->CanPauseAndContinue = true;
 
			this->AutoLog = true;
 
			this->ServiceName = S"MyServiceWinService";
 
		}		
 
	};
 
}
 
 
i don't know how i can  log the error code.
 
 
 
when executing this in a visaul application i can connect to my queue manager
 
 
thanks | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | jefflowrey | 
		  
		    
			  
				 Posted: Thu Jan 06, 2005 7:16 am    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		   Grand Poobah
 
 Joined: 16 Oct 2002 Posts: 19981
  
  | 
		  
		    
			  
				
   
	| bath wrote: | 
   
  
	
 
when executing this in a visaul application i can connect to my queue manager | 
   
 
 
 
Then you probably have a security problem with the service user. _________________ I am *not* the model of the modern major general. | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | bath | 
		  
		    
			  
				 Posted: Thu Jan 06, 2005 7:36 am    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		   Apprentice
 
 Joined: 23 Nov 2004 Posts: 29
  
  | 
		  
		    
			  
				thank,
 
is anyway to solve this security issue?
 
 
in the properties of my service process install 
 
the account is LocalSystem and modifiers is public?
 
 
any idea will be greatly appreciated
 
thanks | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | jefflowrey | 
		  
		    
			  
				 Posted: Thu Jan 06, 2005 7:55 am    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		   Grand Poobah
 
 Joined: 16 Oct 2002 Posts: 19981
  
  | 
		  
		    
			  
				Yes, the way to resolve the security issue is to authorize the service user to MQSeries.
 
 
I would recommend not running your service as LocalSystem. _________________ I am *not* the model of the modern major general. | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | kevinf2349 | 
		  
		    
			  
				 Posted: Thu Jan 06, 2005 9:43 am    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		    Grand Master
 
 Joined: 28 Feb 2003 Posts: 1311 Location: USA 
  | 
		  
		    
			  
				Jeff
 
 
I am having some issues with a VB.Net service that I am writting and I would like you to expand on:
 
 
   
	| Quote: | 
   
  
	|  I would recommend not running your service as LocalSystem | 
   
 
 
 
What is the problem with doing this? Is it purely security? The problem I am having is that when I try to create a listener in my service the service just stops doing anything (no event messages get written but the process still shows as "started"). I have searched on the Internet and have found nothing that gives a good explaination of the differences in the service type. | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | bath | 
		  
		    
			  
				 Posted: Thu Jan 06, 2005 10:18 am    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		   Apprentice
 
 Joined: 23 Nov 2004 Posts: 29
  
  | 
		  
		    
			  
				how have you solve this?
 
 the reason code is 2058 . I think this is a security problem.
 
My service is running in the same computer as my MQserver and i'm logged as administrator.
 
any issue to solve this?
 
thansk | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | bower5932 | 
		  
		    
			  
				 Posted: Thu Jan 06, 2005 10:32 am    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		    Jedi Knight
 
 Joined: 27 Aug 2001 Posts: 3023 Location: Dallas, TX, USA 
  | 
		  
		    
			  
				| 2058 is usually a qmgr name error.  Double-check that the name in your program and the actual qmgr name are identical (eg, same case). | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | bath | 
		  
		    
			  
				 Posted: Fri Jan 07, 2005 1:50 am    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		   Apprentice
 
 Joined: 23 Nov 2004 Posts: 29
  
  | 
		  
		    
			  
				When  running the same code in  a user interface i can connect to my queue manager.
 
 so I think the name of my queue manager is correct.
 
 I also run the service as administrator I  faced the same problem 
 
reason code 2058.
 
 I have to choose an account when running my service.
 
 
please i need some advice
 
thanks | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | 
		    
		   |