c#写的winform设置了启动检查更新,又设置了开机自动启动,开机自启动时不能启动更新程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#写的winform设置了启动检查更新,又设置了开机自动启动,开机自启动时不能启动更新程序相关的知识,希望对你有一定的参考价值。

写了一个C#的Winform程序,程序的启动步骤如下:
链接web service检查是否有新版本。
若存在新版本,提示消息。
关闭消息窗口后,启动update.exe更新程序并结束主程序。
问题来了:
现在通过打包MSI的方式通过AD域控制器部署到终端,终端在开机时能够自动启动程序,也会有新版本的消息提醒窗口,但是关闭消息窗口后不会启动update.exe更新程序。但是手动启动应用程序就可以正常启动更新程序。请高手帮忙解释一下这是什么问题?
在win7 和XP下均如此

没弄过不清楚,不过可以尝试下当用户点关闭时,阻止关闭然后启动update,隐藏本窗体(你在程序中要处理一下,判断是用户点的关闭,还是系统重启或者关闭引起的窗体关闭)追问

谢谢。因为更新程序可能包含主程序,所以需要关闭主程序进程。
所以在调用进程启动update.exe后将主程序关闭了。(不关闭也试过,也启动不了)
在启动update.exe时检查了进程列表中是否存在主程序,若存在的话update.exe也会kill掉主程序。

追答

你为什么不在开机时直接启动update.exe呢,在update中进行版本的检测?

追问

惭愧,程序写的很简陋,第一次写winform程序,没什么经验。
因为主程序启动时会检查是否存在Update.exe的更新,如果有的话先更新Update.exe。
而且也没怎么搞过打包解压之类的,只好一个程序控制另外一个程序的更新了。

参考技术A 你是怎样获取更新程序的路径的??追问

更新程序update.exe与主程序在同一目录下。
用Application.StartupPath

追答

你的代码是不是这麼取的
string updatePath = Application.StartupPath +“\\update.exe”;

追问

System.Diagnostics.Process.Start( Application.StartupPath + @“\update.exe");
但是手工启动的主程序的时候是可以启动update.exe的啊。。。。

追答

再看一下自动启动程序时程序是否都能把配置文件读取到,我之前也碰到这种情况,就是因为没读取到配置文件导致的

追问

谢谢你,惭愧的是我没把update路径配置在配置文件里,直接写在代码里了。。。。

追答public static bool CheckUpdate()

    bool noUpdate = false;
    try
    
        SettingSystem.LoadSetting();
        string newVersion = GetVersion();
        if (newVersion != SettingSystem.Version)
        
            noUpdate = true;
            SettingSystem.SaveSetting(newVersion);
            Process.Start(AppDomain.CurrentDomain.BaseDirectory + "Update.exe");
            return noUpdate;
        
    
    catch (Exception e)
    
        System.Windows.Forms.MessageBox.Show("检查更新失败!" + e.Message);
    
    SettingSystem.SaveSetting();
    return noUpdate;

上面代码我能达到自动更新

追问

非常感谢你贴出来的代码。
你是从安装目录中找吗?

追答

也是从主程序的路径啊

追问

AppDomain.CurrentDomain.BaseDirectory
头次写winform程序,这个不知道。惭愧。
准备下班吃饭,晚上回去跟您再继续。
非常感谢您耐心的解答。

追答

??????

追问

不好意思,那天下班以后晚上出门了,今天才回来。一直在想您说的那些,的确是有可能的,是不是系统启动的时候程序执行的默认路径和手工启动不一样。这个我明天上班试一试,非常感谢您的关心。咱可以邮件交流么?kelileisi_feng@sina.com

追答

我觉得是程序开机启动时导致程序获取不到当前路径导致的,具体原因还没弄清楚,你可以百度或Google下 ”c# 获取可执行文件路径方法“ ,有好多种取法,多试几个应该会找到一个可用的。

本回答被提问者和网友采纳

在C# winform 程序里设置 DataGrid 为只读属性。

参考技术A VS2005智能设备上,你只放DataGrid,不要设置click事件,貌似这个datagrid就是只读的,并不像在windows上点击单元格可以进行编辑
,我想你设置只读属性的目的是为了防止表里的数据被修改吧,那就别设置datagrid的任何点击事件,只显示数据就行了
参考技术B 哦~那你题目有问题了~那个是手机程序开发,不是winfrom~winfrom是指windows应用程序
而且只读这个很难修改的说~一般就是enable,只读也就ReadOnly
属性=true

以上是关于c#写的winform设置了启动检查更新,又设置了开机自动启动,开机自启动时不能启动更新程序的主要内容,如果未能解决你的问题,请参考以下文章

C# winform 如何设置让窗体尽在第一次启动时运行?

C# WinForm窗体界面设置问题

C# winform 文本框里,怎么设置数字的格式?

C#winform做了个简单的应用软件,里面有设置功能,但是每次启动都要重新设置,怎么才能记住我的设置?

c# 在 winform 开发中,当鼠标移动到某图片时,该图片自动隐藏,移开时,又显示出来。求代码。

c# winform 如何批量更新数据库数据