asp.net 中winform防止被调用的实现方法

 

 代码如下 复制代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Diagnostics;
using System.Management;

namespace 不允许外部调用
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Process proc = Process.GetCurrentProcess();
            if (!FillDetailUseWmi(proc.Id).ToLower().Equals("explorer".ToLower()))
            {
                MessageBox.Show("该程序禁止外部程序调用。");
                Application.ExitThread();
            }
            else
            {
                Application.Run(new Form1());
            }
        }

        //// <summary>
        /// 使用Wmi获取指定进程的创建者等信息
        /// </summary>
        /// <param name="pID">进程ID</param>
        private static string FillDetailUseWmi(int pID)
        {
            string pname = string.Empty;
            ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * From Win32_Process Where ProcessID=" + pID);
            ManagementObjectCollection moc = searcher.Get();
            ManagementOperationObserver observer = new ManagementOperationObserver();
            HandleObjectReady hor = new HandleObjectReady();
            //监测异步方法是否已成功返回
            observer.ObjectReady += new ObjectReadyEventHandler(hor.Done);
            foreach (ManagementObject mo in moc)
            {
                //异步调用该对象的GetOwner方法,获取进程创建者
                mo.InvokeMethod(observer, "GetOwner", null);
                //等待异步调用返回
                while (!hor.Complete)
                {
                    System.Threading.Thread.Sleep(500);
                }
                string user = "";
                //判断获取用户名的操作是否成功
                if (hor.Obj["returnValue"].ToString() == "0")
                {
                    user = hor.Obj.Properties["User"].Value.ToString();
                }
                if (mo["ParentProcessID"] != null )
                {
                    //根据父进程ID获取父进程名称
                    int vpID=Convert.ToInt32(mo["ParentProcessID"]);
                    pname = Process.GetProcessById(vpID).ProcessName;
                }
            }
            //释放资源
            searcher.Dispose();
            searcher = null;
            moc.Dispose();
            moc = null;
            observer = null;
            hor = null;
            return pname;
        }
        /**/
        /// <summary>
        /// 该类用于监测Wmi异步调用方法是否已经返回
        /// </summary>
        public class HandleObjectReady
        {
            private bool complete = false;
            private ManagementBaseObject obj;
            public void Done(object sender, ObjectReadyEventArgs e)
            {
                complete = true;
                obj = e.NewObject;
            }
            public bool Complete
            {
                get
                {
                    return complete;
                }
            }
            public ManagementBaseObject Obj
            {
                get
                {
                    return obj;
                }
            }
        }
    }
}

需要添加.Net引用 System.Management

时间: 2024-10-30 10:39:00

asp.net 中winform防止被调用的实现方法的相关文章

ASP.NET中常用的文件上传下载方法

asp.net|上传|下载     文件的上传下载是我们在实际项目开发过程中经常需要用到的技术,这里给出几种常见的方法,本文主要内容包括:1.如何解决文件上传大小的限制2.以文件形式保存到服务器3.转换成二进制字节流保存到数据库以及下载方法4.上传Internet上的资源 第一部分:    首先我们来说一下如何解决ASP.NET中的文件上传大小限制的问题,我们知道在默认情况下ASP.NET的文件上传大小限制为2M,一般情况下,我们可以采用更改WEB.Config文件来自定义最大文件大小,如下:<

Asp.NET中常用的一些优化性能的方法

asp.net|性能|优化 Asp.NET中常用的一些优化性能的方法 ASP.NET 的缓存机制相比ASP有很大的改进,本文档除对常用优化方法进行总结介绍外,强调了如何使用ASP.NET的缓存来获得最佳性能. 1:不要使用不必要的session和ASP中一样,在不必要的时候不要使用Session. 可以针对整个应用程序或者页面禁用会话状态: l 禁用页面的会话状态 l 禁用应用程序的会话状态 在应用程序的Web.Config文件的sessionstate配置节中,将mode属性设置为off. 即

灵活掌握asp.net中gridview控件的多种使用方法(下)_实用技巧

继续上篇文章的学习<灵活掌握asp.net中gridview控件的多种使用方法(上)>,在此基础上巩固gridview控件的操作使用,更上一层楼. 11.GridView实现用"..."代替超长字符串:效果图:   解决方法:数据绑定后过滤每一行即可 for (int i = 0; i <= GridView1.Rows.Count - 1; i++) { DataRowView mydrv; string gIntro; if (GridView1.PageInde

在Asp程序中取得表单所有内容的方法

程序 /**@描述: 在Asp程序中取得表单所有内容的方法@作者: 慈勤强@Email:cqq1978@Gmail.com Http://blog.csdn.net/cqq*/ 刚才在论坛里面看到有人问这个问题,就是在Asp中如何得到所有表单的名称跟 对应的值.其实,这个问题很简单,但是可能还是有很多人不知道该怎么做,所以特地 写下来,仅供参考. 在Asp程序中,用来获得客户端数据的对象是 Request,这个对象给我们提供了很多 的方法以及属性.比如,有这样一个Form, <FORM METH

jni- cocos2d中函数通过JNI调用android中类方法的疑问

问题描述 cocos2d中函数通过JNI调用android中类方法的疑问 如题,我试图在cocos2d中调用android的某方法,android中被调用方法如下: public class AppActivity extends Cocos2dxActivity { static { System.loadLibrary("cocos2dcpp"); } public static void gotoActivity() { Intent in = new Intent(AppAct

灵活掌握asp.net中gridview控件的多种使用方法(上)_实用技巧

灵活使用asp.net中gridview控件的方法有很多种,本文内容很富,希望大家都能有所收获. 1.GridView无代码分页排序: 效果图: 小提示: 1.AllowSorting设为True,aspx代码中是AllowSorting="True": 2.默认1页10条,如果要修改每页条数,修改PageSize即可,在aspx代码中是PageSize="12". 3.默认的是单向排序的,右击GridView弹出"属性",选择AllowSort

asp.net中EXCEL数据导入到数据库的方法_实用技巧

本文实例讲述了asp.net中EXCEL数据导入到数据库的方法.分享给大家供大家参考.具体分析如下: excel是办公中非常常用的一个办公表格了,但我们在开发中通常会需要直接把excel数据快速导入到数据库中了,这里整理了一个asp.net中EXCEL数据导入到数据库的例子供各位参考学习. 注意:EXCEL中的第一行不能导入.下面是源码:IntoExcel.aspx: 复制代码 代码如下: <%@ Page  AutoEventWireup="true" CodeFile=&qu

asp.net中Timer无刷新定时器的实现方法_实用技巧

 本文实例讲述了asp.net中Timer无刷新定时器的实现方法.Timer控件要实现无刷新,得用到ajax技术,这里使用VS2008自带的ajax技术.    首先得添加一个ScriptManager控件,然后再添加一个UpdatePanel用于存放Timer控件内容的,就可以实现无刷新了.下面是详细的内容: 一.前台代码如下: <form id="form1" runat="server"> <asp:ScriptManager ID=&quo

asp.net中C#实现手动回收内存的方法_实用技巧

C#有自动回收内存的机制,但是有时自动回收有一定滞后,需要在变量使用后迅速回收,节约内存,这里介绍一个最简单的方法. 1.先对对象赋值 null; 2.使用System.GC.Collect() 复制代码 代码如下: class Program {          static void Main(string[] args)          {              long lenth = 1024 * 1024 * 128;                GetCost("程序启动