来来来,瞧一瞧,看一看:记尝试解决一个问题。

最近收到一个外部 bug:[系统 / 打开 / 网站] 组件 期望打开 ie,但打开的是搜狗浏览器。帖子链接如下 【请教】网站组件使用为什么打开的是搜狗或者 360 浏览器

先说结论:

  1. 我没有从代码层面解决问题!但如果有人可以解决,请告诉我··· print(“Thanks”)
  2. 远离国产流氓,人人有责; 要用流氓来对抗流氓;(牛战士也不行!)
  3. VMWare WorkStation 是个好软件,虚拟机是个伟大的发明

show you the code

import subprocess
def run_app(path=None, work_path=None):
    try:
        proc = subprocess.Popen(path, cwd=work_path)  # 关键代码
    except Exception as e:
        raise e
        
def open_url(ie_path="C:/Program Files (x86)/Internet Explorer/iexplore.exe", url=""):
    try:
        path = ie_path + " " + url
        result = run_app(path, work_path=None)
        return result
    except Exception as e:
        raise e
open_url(ie_path="C:/Program Files (x86)/Internet Explorer/iexplore.exe", url="https://www.baidu.com")	 # 客户是这样写的
###       
ie_path = r"C:/Program Files (x86)/Internet Explorer/iexplore.exe"
all_path = r"C:/Program Files (x86)/Internet Explorer/iexplore.exe https://baidu.com.cn"
cmd_path = r'"C:/Program Files (x86)/Internet Explorer/iexplore.exe" https://baidu.com.cn'
subprocess.Popen(all_path)
###

第一阶段 干净的机器(只有 ie, 未安装各种软件···)

  1. 打开注册表,找到下图所示的项
    来来来,瞧一瞧,看一看:记尝试解决一个问题。
    可以看到 http/shell/open/command 项右侧 (默认) 值是 iexplore.exe, 此时 你可以自由修改其值。 (DelegateExecute) 值是一串 GUID, 此时你也可以自由修改。

第二阶段 下载安装搜狗浏览器, 去掉【设为默认浏览器】选项

来来来,瞧一瞧,看一看:记尝试解决一个问题。
安装完成后,查看注册表,和第一阶段一样,没有变化 :)

初步问题复现
  1. 新建组件【网站】,直接运行,成功打开 ie
    来来来,瞧一瞧,看一看:记尝试解决一个问题。

  2. 右侧属性栏【网址】 填写 “https://www.baidu.com”, 运行组件,弹出的也是 ie。

将其设为默认浏览器

查看注册表
来来来,瞧一瞧,看一看:记尝试解决一个问题。
此时可以看到 ie 被改成了 Sogou, 此时你仍可以修改其默认的数据值。

重复上述运行组件的操作,结果一致。

第三阶段 下载安装搜狗浏览器, 勾选【设为默认浏览器】选项

查看注册表,此时不可以修改其默认的数据值
来来来,瞧一瞧,看一看:记尝试解决一个问题。
搜索得知,与权限有关,按照教程,修改权限,但仍不修改(默认)对应的数据值,却能改 DelegateExcute 对应的数据值。

来来来,瞧一瞧,看一看:记尝试解决一个问题。
测试组件:
1. 新建组件【网站】,直接运行,成功打开 ie
2. 右侧属性栏【网址】 填写 “https://www.baidu.com”, 运行组件,弹出的却是搜狗浏览器。

第四阶段 僵局··· 我该何去何从

我相信 windows 的开发人员,也相信 python subprocess 库的开发人员。
或许是我的代码问题,查看文档,没发现有啥特殊的参数。
来来来,瞧一瞧,看一看:记尝试解决一个问题。
诚然,我可以换其他的库,比如 os。 但 subprocess 库是 python 官方推荐使用的库,而且功能肯定没问题,我为什么要换?(更何况换了之后,在设计器组件方面,还可能有兼容问题···)

第五阶段 休道我无情 - - -> 我安装了 腾讯安全管家

在腾讯安全管家里有一个【浏览器保护】,将默认浏览器设为 ie
来来来,瞧一瞧,看一看:记尝试解决一个问题。
此时运行组件,打开的仍是搜狗···
可笑的是下面一张图
来来来,瞧一瞧,看一看:记尝试解决一个问题。

我点击了腾讯管家弹窗里的【请看详细说明】,但弹出的解决方案网址却是用搜狗打开的··· 和弹窗里的【已锁定默认浏览器为 ie】 形成了鲜明的对比。
看来搜狗比腾讯流氓

第六阶段 让我们回到第二阶段,重新安装 搜狗浏览器

因为第五阶段使用的是第三阶段下载安装的搜狗浏览器, 其勾选【设为默认浏览器】选项, 那么我想如果我再次安装搜狗,但不勾选【设为默认浏览器】呢?
结局是 组件打开运行,打开的是 ie 浏览器了···

回头看

1. 我并没有从代码层面解决问题,因为我不认为实现组件的代码有问题! 如果有人对此不同意见,也可以提出来,当然我非常愿意看到有大神可以修改这段代码,使其能打开 IE!

2. 第三阶段 中,我尝试修改注册表,根据网上教程,给了全部权限,但仍不能修改! 同时我在任务管理器将所有搜狗相关的进程、服务全停止了(不确定有无漏网之鱼,当然这非常有可能···)。 也希望各位看官,可以在自己电脑上尝试一下!

向前望

解决方法:
1、在安装搜狗时,请不要勾选【设为默认浏览器】
2、远离国产流氓

礼毕撒花

后续: 若有人遇到此问题或相类似问题,可以尝试使用【系统 / 浏览器 / 打开浏览器】组件。
来来来,瞧一瞧,看一看:记尝试解决一个问题。