
取得控制台应用程序的根目录方法 方法1、EnvironmentCurrentDirectory 取得或设置当前工作目录的完整限定路径
方法2、AppDomainCurrentDomainBaseDirectory 获取基目录,它由程序集冲突解决程序用来探测程序集
取得WinForm应用程序的根目录方法 1、EnvironmentCurrentDirectoryToString();//获取或设置当前工作目录的完全限定路径
2、ApplicationStartupPathToString();//获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称
3、DirectoryGetCurrentDirectory();//获取应用程序的当前工作目录
4、AppDomainCurrentDomainBaseDirectory;//获取基目录,它由程序集冲突解决程序用来探测程序集
5、AppDomainCurrentDomainSetupInformationApplicationBase;//获取或设置包含该应用程序的目录的名称
现成的工具有Xenocodenbsp;的postbuidle或者vas,还有Salamandernbsp;NETnbsp;Linker。另外还有MaxToCodenbsp;作者以前做的frameworknbsp;linker,以及一些支持注册表模拟和文件模拟的打包工具molebox,thinstall等。nbsp;nbsp;Xenocode的是使用了一个虚拟机环境,模拟框架需要的注册表信息和文件信息。Xenocode号称的生成native代码功能实际上就是指的这个功能。我测试了几个程序打包,兼容性似乎不怎么好,不知道是不是因为机器上已经安装了框架的原因。nbsp;nbsp;Jason做的frameworknbsp;linker以前我也使用过,他实际上是利用了Remotesoft的内核文件,然后自己实现了一个loader。好像是使用的早期的内核文件,兼容性也不太好。nbsp;nbsp;Salamandernbsp;Netnbsp;Linkernbsp;,Remotesoft的一个产品,没有可以下载的,但是其兼容性似乎很不错。移动的飞信软件就利用了它的核心。某网友的方法似乎是利用remotesoft的核心和飞信的框架,因为他并没有免费公开方法,从他给出的样例可以看到有remotesoft的核心文件以及飞信的框架程序。这里要介绍的方法是直接利用飞信的框架来实现脱离nbsp;Netnbsp;framework运行。nbsp;nbsp;首先下载一个飞信的程序安装,在安装目录中会有VMDotNetnbsp;目录,这个就是Net框架虚拟环境需要的文件,直接把整个目录提取出来。nbsp;nbsp;如何利用这个虚拟环境运行自己的nbsp;Netnbsp;程序呢很简单,一个命令行搞定。在nbsp;VMDotNetnbsp;目录里面会找到一个nbsp;FetionVMexenbsp;,这个是虚拟环境的loader。nbsp;nbsp;使用方法:nbsp;nbsp;FetionVMexenbsp;pathtoyoureexe。就是直接把你的nbsp;Netnbsp;程序作为命令行参数传递给FetionVMexenbsp;就可以在这个虚拟环境中执行你的net程序了。nbsp;nbsp;最好再自己写一个启动程序,首先检查系统是否安装了Net框架,如果有直接运行,没有调用虚拟环境运行。nbsp;nbsp;这个启动程序飞信也有,如果不想自己写就直接拿飞信安装目录中的nbsp;Feitionexe,但是这样的话你自己的Net程序的名字必须叫nbsp;FeitionFXexenbsp;。把它和Feitionexenbsp;放在同一目录下,直接执行nbsp;Feitionexenbsp;即可。另外,如果你对Net程序使用了加密保护,需要注意一下,目前市面上的大部分Net加密工具加密后的程序集不能在这个虚拟环境中运行的。 查看原帖>>
private void toolStripButton1_Click(object sender, EventArgs e)
{
SystemDiagnosticsProcess p = SystemDiagnosticsProcessStart("calc");//notepad");
pWaitForInputIdle();
SetParent(pMainWindowHandle, thisHandle);
ShowWindowAsync(pMainWindowHandle, 3);
}
[DllImport("user32dll")]
static extern IntPtr SetParent(IntPtr hWndChild,IntPtr hWndNewParent);
[DllImport("user32dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd,int nCmdShow);
或者
[DllImport("user32dll")]
static extern int FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32dll")]
static extern int SetParent(int hWndChild, int hWndNewParent);
写在方法里,
SystemDiagnosticsProcessStart("calcexe");
SystemDiagnosticsProcessStart("winwordexeexe");
SystemDiagnosticsProcessStart("excelexe");
SystemDiagnosticsProcessStart("notepadexe");
SetParent(FindWindow(null, "计算器"), thisHandleToInt32());//FindWindow(null, "计算器")第一个参数是类名,第二个是标题名
只能是这几个可以,其他的程序就不行
SystemDiagnosticsProcessStart("calcexe");
SystemDiagnosticsProcessStart("winwordexeexe");
SystemDiagnosticsProcessStart("excelexe");
SystemDiagnosticsProcessStart("notepadexe");
以上就是关于WinForm 几种获得应用程序启动路径的方法全部的内容,包括:WinForm 几种获得应用程序启动路径的方法、c#做的Winform程序如何在不安装Framework的情况下运行求答案、winform窗体里面怎么打开exe程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)