首 页IT知识库收藏内容
当前位置:翔宇亭IT乐园IT知识库C#C#其它

C#获取Setup文件的运行路径的方法

减小字体 增大字体 作者:不详  来源:转载  发布时间:2011-09-16 10:16:01

在我 做的一个项目中因为需要在安装时做配置,而在打包之前是不知道配置的具体信息的。用InstallShield来做打包好像做这样的处理比较方便,但是使用Visual Studio创建安装项目来打包时好像不是那么容易,在网上查找相关的资料一直没有找到很好的方法来直接获取其运行路径,网上有人说继承Installer来做,但是无论如何所能取得的路径是系统msiexec.exe的运行路径,所以这种方法看起来是行不通了。获取其安装路径也是非常简单而且方法有很多种。

想到以前在做项目时要求程序只能有一个运行实例,这种方法来处理岂不是很好,换种思路来处理:先取得当前运行的所有Process然后再找到那个Setup或是*.msi那不就好了。

想到着就赶快动手试验,在程序中加上处理代码,很快搞定。

Process[] processes = Process.GetProcesses();
string tmp = "";
int i = 0;//调试时为了查找线程的个数
foreach (Process pro in processes)
{
    //MSI Title即为你的打包文件在运行时显示的标题
    if (pro.ProcessName.ToLower() == "msiexec" && pro.MainWindowTitle == "MSI Title")
    { 
    //这里在Vista下测试时因为要读写文件(由于Vista使用了UAC来增强安全性, 
    //要求必须以管理员身份运行,而直接运行msi文件只能以普通权限来运行), 
    //所以不让用户直接运行MSI文件,而要求必须从Setup.exe文件运行, 
    //如果你不需要在Vista下使用则不用如此处理 
    MessageBox.Show("Please run setup.exe", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error); 
    throw new InstallException("run");
    }
    else if (pro.ProcessName.ToLower().IndexOf("setup")>0 && pro.MainWindowTitle == "MSI Title")
    {//判断ProcessName是否是setup,并且其MainWindowTitle为你的安装文件的Title
       tmp = tmp + pro.Id + "" + pro.ProcessName + Environment.NewLine;
       tmp = tmp + " " + i.ToString() + "=" + pro.MainModule.FileName
              +Environment.NewLine;//pro.MainModule.FileName即为Setup的完整运行路径
       tmp = tmp + " " + i.ToString() + "=" + pro.MainWindowTitle + Environment.NewLine;
     }
}
MessageBox.Show(tmp);

不过此方法有点不妥之处,那就是如果用户改变了Setup.exe或是*.msi的文件名就不好处理了,为了防止在用户更改文件名后运行安装,你可以在程序中加上判断文件名更改的处理,给用户提示。

微信搜索“优雅的代码”关注本站的公众号,或直接使用微信扫描下面二维码关注本站公众号,以获取最新内容。

个人成长离不开各位的关注,你的关注就是我继续前行的动力。

Tags:C# 路径

知识评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
愿您的精彩评论引起共鸣,带来思考和价值。
用户名: 查看更多评论
分 值:100分 90分 80分 70分 60分 40分 20分
内 容:
验证码:
关于本站 | 网站帮助 | 广告合作 | 网站声明 | 友情连接 | 网站地图
本站部分内容来自互联网,如有侵权,请来信告之,谢谢!
Copyright © 2007-2024 biye5u.com. All Rights Reserved.