SecurityException Permission denied

Hello.
I have a C# windows application written using VS .NET 2005.  In my application I am referencing a COM dll that has a procedure named SendToDDC.  When my code calls this procedure, I am getting an unhandled SecurityException 'Permission denied'.  I call this procedure mulitple times in my code.  The first call always works successfully, but any subsequent calls receive the exception.  I do not need to know how to handle the exception, but I would like to know what I need to do to avoid it.  I need to call this procedure or my application is useless.

TIA,
Andrew
LVL 2
afg1976Asked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

LordWabbitCommented:
Hard to say without knowing what the com dll does, perhaps it's like the CDONTS mail object and needs to be destroyed and recreated each time you use it?
afg1976Author Commented:
The dll sends data to an ERP system over TCP and then gets a response and sends it back to my application.  The dll has no procedures for destroying the object.  I do have line: ddc = null;  

Is there a better way to do what you are indicating?  I have included my code that calls the Procedure SendToDDC below.  I also have the details of the exception below that.  



using System;
using System.Collections.Generic;
using System.Configuration;
using System.Text;

namespace PowerTAP
{
    class cDDCManager
    {
        private string DDC_DELIMETER = ConfigurationSettings.AppSettings["DDCDelimeter"].ToString();
        private string DDC_HOSTIP = ConfigurationSettings.AppSettings["DDCHostIP"].ToString();
        private int DDC_PORT = Convert.ToInt16(ConfigurationSettings.AppSettings["DDCPort"]);
        private int DDC_TIMEOUT = Convert.ToInt16(ConfigurationSettings.AppSettings["DDCTimeout"]);
        private bool DDC_LOOPBACK = Convert.ToBoolean(ConfigurationSettings.AppSettings["LoopBack"]);
        private string DDC_LOGFILE = ConfigurationSettings.AppSettings["LogFile"].ToString();
        private int DDC_SESSIONID = Convert.ToInt16(ConfigurationSettings.AppSettings["DDCSessionId"]);
        public int errorCount = 0;
        public enum ddcFunction
        {
            where_am_i,
            punch_in_setup,
            punch_out_setup,
            labour_on_setup,
            indirect_on_setup,
            labour_on_team_setup,
            labour_off_setup,
            operations_comp_setup,
            show_comp_qty
        }

        private string[] p_returnValues;

        public string returnValue(int idx)
        {
            try
            {
                return p_returnValues[idx];
            }
            catch
            {
                return "0";
            }
        }

        public string callDDC(ddcFunction function, string[] ddcParams)
        {
            string defaultServer = "tihrac863m000";
            DisusDDC.DDCcom ddc = new DisusDDC.DDCcom();
            ddc.DDCDelimiter = DDC_DELIMETER;
            ddc.DDCHostIP = DDC_HOSTIP;
            ddc.DDCPort = DDC_PORT;
            ddc.DDCSessionId = DDC_SESSIONID;
            ddc.DDCTimeout = DDC_TIMEOUT;
            ddc.LoopBack = DDC_LOOPBACK;
            ddc.LogFile = DDC_LOGFILE;

            ddc.ClearDDCParams();
            ddc.ClearErrorStrings();

            ddc.DDCServer = defaultServer;
            ddc.DDCFunction = function.ToString();

            for (int i = 0; i <= ddcParams.GetUpperBound(0); i++)
            {
                ddc.SetDDCParam(ref ddcParams[i]);
            }

            if (ddc.SendToDDC())
            {
                p_returnValues = new string[ddc.ResponseCount];
                for (int i = 0; i < ddc.ResponseCount; i++)
                {
                    p_returnValues[i] = ddc.GetResponse(i+1);
                }
                return "Success";
            }
            else
            {
                errorCount = ddc.ErrorCount;
                p_returnValues = new string[errorCount];
                for (int i = 0; i < errorCount; i++)
                {
                    p_returnValues[i] = ddc.GetError(i+1);
                }
                return "Error";
            }
            ddc = null;
        }
    }
}




Also, here is the Exception details:
System.Security.SecurityException was unhandled
  Message="Permission denied"
  Source="DDC"
  StackTrace:
       at DDC.DDCcomClass.SendToDDC()
       at PowerTAP.cDDCManager.callDDC(ddcFunction function, String[] ddcParams) in C:\Documents and Settings\andrew\My Documents\Visual Studio 2005\Projects\PowerTAP\PowerTAP\cDDCManager.cs:line 68
       at PowerTAP.EmployeeAction.btnTimeIn_Click(Object sender, EventArgs e) in C:\Documents and Settings\andrew\My Documents\Visual Studio 2005\Projects\PowerTAP\PowerTAP\EmployeeAction.cs:line 108
       at System.Windows.Forms.Control.OnClick(EventArgs e)
       at System.Windows.Forms.Button.OnClick(EventArgs e)
       at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
       at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
       at System.Windows.Forms.Control.WndProc(Message& m)
       at System.Windows.Forms.ButtonBase.WndProc(Message& m)
       at System.Windows.Forms.Button.WndProc(Message& m)
       at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
       at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
       at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
       at System.Windows.Forms.Application.Run(Form mainForm)
       at PowerTAP.Program.Main() in C:\Documents and Settings\andrew\My Documents\Visual Studio 2005\Projects\PowerTAP\PowerTAP\Program.cs:line 17
       at System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)
       at System.Runtime.Hosting.ManifestRunner.Run(Boolean checkAptModel)
       at System.Runtime.Hosting.ManifestRunner.ExecuteAsAssembly()
       at System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext, String[] activationCustomData)
       at System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssemblyDebugInZone()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.runTryCode(Object userData)
       at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
       at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
LordWabbitCommented:
Mmmm, personal folders have security restrictions on them by default (so another non admin user logging on cannot see your docs etc.) try changing the projects folder to allow full control to everyone, the com dll might be trying to write to the local directory and does not have the same sort of disk permissions the calling .net app has.

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
afg1976Author Commented:
Yes, thank you.  There is a Log file the dll is trying to write.  It could not access the directory for the log file.
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
C#

From novice to tech pro — start learning today.