C# 用C语言实现Windows应用程序中MsAccess的自动化#

C# 用C语言实现Windows应用程序中MsAccess的自动化#,c#,asp.net,winforms,ms-access,automation,C#,Asp.net,Winforms,Ms Access,Automation,我有一个窗口应用程序,我们正在其中自动化MsOffice(word/excel/powerpoint/access)。 我们已经为word/excel/powerpoint编写了帮助器类,现在我们正在尝试为Access编写帮助器类 *其中,我们希望将方法写入 1退出应用程序(访问), 2 Evaluvate当前正在运行, 3个应用程序(访问), 4获取或创建应用程序(访问), 5运行应用程序(访问), 6关闭应用程序(访问)等 What i have tried so far: AccessH

我有一个窗口应用程序,我们正在其中自动化MsOffice(word/excel/powerpoint/access)。 我们已经为word/excel/powerpoint编写了帮助器类,现在我们正在尝试为Access编写帮助器类

*其中,我们希望将方法写入
1退出应用程序(访问),
2 Evaluvate当前正在运行, 3个应用程序(访问), 4获取或创建应用程序(访问),
5运行应用程序(访问),
6关闭应用程序(访问)等

What i have tried so far:
AccessHelper.cs

using System;
using System.Drawing;
using System.IO;
using System.Runtime.InteropServices;
using AccessInterop = Microsoft.Office.Interop.Access;

namespace TeTec.Action.Office2013.Access
{
    public static class AccessHelper
    {
        #region Constants

        private static readonly string _accessApplicationObjectStoreKey = "AccessApplication";

        #endregion


        #region Private methods
        private static void QuitApplication(AccessInterop.Application accessApplication)
        {
            if (accessApplication != null)
            {
                try
                {
                    accessApplication.DoCmd.SetWarnings(false);
                    accessApplication.Visible = false;
                    accessApplication.DoCmd.Quit();

                    Marshal.FinalReleaseComObject(accessApplication);

                    accessApplication = null;
                    GC.Collect();
                    GC.WaitForPendingFinalizers();

                    accessApplication.DoCmd.CloseDatabase();
                    accessApplication.DoCmd.Quit();
                }
                catch (Exception)
                {
                    //Ignore
                }
            }
        }

        private static AccessInterop.Application GetOrCreateAccessApplication(IObjectStore objectStore)
        {
            AccessInterop.Application accessApplication = objectStore.Retrieve<AccessInterop.Application>(_accessApplicationObjectStoreKey);
            if (accessApplication == null)
            {
                accessApplication = new AccessInterop.Application();
                objectStore.Store(_accessApplicationObjectStoreKey, accessApplication);
            }

            return accessApplication;
        }

        #endregion


        #region Internal methods
        internal static void Cleanup(IObjectStore objectStore, bool terminate)
        {
            AccessInterop.Application accessApplication = objectStore.Retrieve<AccessInterop.Application>(_accessApplicationObjectStoreKey);
            if (accessApplication != null)
            {
                QuitApplication(accessApplication);
                objectStore.Remove(_accessApplicationObjectStoreKey);
            }

            if (terminate)
                WinUtil.TerminateProcess("access.exe", null, null, true);
        }
        #endregion


        #region Public methods

        #region Basic operation

        public static bool Run(IQuestion question)
        {
            AccessInterop.Application accessApplication = GetOrCreateAccessApplication(question.ObjectStore);
            //AccessInterop.DataAccessPage accesPage = null;


            try
            {
                //Avoid screen flickering or unwanted alerts while initializing

                accessApplication.DoCmd.Echo(false);
                accessApplication.DoCmd.SetWarnings(false);

                //Create a document, if one does not exist already
                //if (accessApplication.catlo == 0)
                //    accesPage = accessApplication.DataAccessPages.a;

                //Activate Word application window
                //accessApplication.Visible = true;
                //accessApplication.ScreenUpdating = true;
                //accessApplication.DisplayAlerts = displayAlertLevel;
                //accessApplication.ActiveWindow.Activate();

                ////Setup application main window
                //if (question.WorkArea != Rectangle.Empty)
                //{
                //    accessApplication.WindowState = AccessInterop.WdWindowState.wdWindowStateNormal;
                //    accessApplication.ActiveWindow.Left = question.WorkArea.Left;
                //    accessApplication.ActiveWindow.Top = question.WorkArea.Top;
                //    accessApplication.ActiveWindow.Width = question.WorkArea.Width;
                //}
                //else
                //{
                //    accessApplication.WindowState = AccessInterop.WdWindowState.wdWindowStateMaximize;
                //}

                return true;
            }
            catch (Exception)
            {
                Cleanup(question.ObjectStore, true);
                return false;
            }
        }

    public static void Close(IQuestion question)
    {
                Cleanup(question.ObjectStore, false);
            }

    #endregion

    #endregion
    }
    }
使用系统;
使用系统图;
使用System.IO;
使用System.Runtime.InteropServices;
使用AccessInterop=Microsoft.Office.Interop.Access;
命名空间TeTec.Action.Office2013.Access
{
公共静态类AccessHelper
{
#区域常数
私有静态只读字符串_accessApplicationObjectStoreKey=“AccessApplication”;
#端区
#区域私有方法
专用静态应用程序(AccessInterop.Application accessApplication)
{
if(accessApplication!=null)
{
尝试
{
accessApplication.DoCmd.SetWarnings(false);
accessApplication.Visible=false;
accessApplication.DoCmd.Quit();
封送处理最终EleaseComObject(accessApplication);
accessApplication=null;
GC.Collect();
GC.WaitForPendingFinalizers();
accessApplication.DoCmd.CloseDatabase();
accessApplication.DoCmd.Quit();
}
捕获(例外)
{
//忽略
}
}
}
私有静态AccessInterop.Application GetOrCreateAccessApplication(IObjectStore objectStore)
{
AccessInterop.Application accessApplication=objectStore.Retrieve(\u accessApplicationObjectStoreKey);
if(accessApplication==null)
{
accessApplication=新的AccessInterop.Application();
Store(_accessApplicationObjectStoreKey,accessApplication);
}
退货申请;
}
#端区
#区域内部方法
内部静态无效清除(IObjectStore objectStore,bool terminate)
{
AccessInterop.Application accessApplication=objectStore.Retrieve(\u accessApplicationObjectStoreKey);
if(accessApplication!=null)
{
退出应用程序(accessApplication);
objectStore.Remove(_accessApplicationObjectStoreKey);
}
如果(终止)
TerminateProcess(“access.exe”,null,null,true);
}
#端区
#区域公共方法
#区域基本操作
公共静态布尔运行(IQuestion问题)
{
AccessInterop.Application accessApplication=GetOrCreateAccessApplication(question.ObjectStore);
//AccessInterop.DataAccessPage accesPage=null;
尝试
{
//初始化时避免屏幕闪烁或不必要的警报
accessApplication.DoCmd.Echo(false);
accessApplication.DoCmd.SetWarnings(false);
//如果尚未创建文档,请创建文档
//if(accessApplication.catlo==0)
//accesPage=accessApplication.DataAccessPages.a;
//激活Word应用程序窗口
//accessApplication.Visible=true;
//accessApplication.ScreenUpdate=true;
//accessApplication.DisplayAlerts=displayAlertLevel;
//accessApplication.ActiveWindow.Activate();
////设置应用程序主窗口
//if(question.WorkArea!=矩形.空)
//{
//accessApplication.WindowsState=AccessInterop.wdWindowsState.wdWindowsStateNormal;
//accessApplication.ActiveWindow.Left=question.WorkArea.Left;
//accessApplication.ActiveWindow.Top=question.WorkArea.Top;
//accessApplication.ActiveWindow.Width=question.WorkArea.Width;
//}
//否则
//{
//accessApplication.WindowsState=AccessInterop.wdWindowsState.wdWindowsState最大化;
//}
返回true;
}
捕获(例外)
{
清理(question.ObjectStore,true);
返回false;
}
}
公共静态无效关闭(IQuestion问题)
{
清理(question.ObjectStore,false);
}
#端区
#端区
}
}
GetOrCreateApplication&CleanUpApplication不工作。所有方法均不工作

谁能帮帮我吗


谢谢

你忘了提到哪里出了问题。你说“不工作”。这到底是什么意思?这些例程是否正在运行,但产生了错误的结果?他们连跑都不跑吗?它们是否运行,但有错误?不返回任何内容