在另一个进程中成功关闭对话框

时间:2010-11-03 14:12:03

标签: c# .net winapi win32-process

我有一个问题。问题是我有另一个调用ShowDialog()方法的进程,我需要从另一个进程关闭此对话框,但我需要通过返回DialogResult.OK来关闭它。

所以从我的.net程序(另一个进程)我想成功关闭它。我试图使用winapi来解决这个问题,尝试过EndDialog函数,但它返回ACCESS_DENIED错误。试图使用钩子,但那些返回error_no_token。

我需要这个以静默方式启动msi安装程序。我用/ qn开关启动它,但这个该死的安装程序有嵌入式操作,无论如何都显示对话框。我尝试使用sendmessage函数关闭此窗口,但在这种情况下安装程序说它是错误的,并回滚安装过程。我可以通过编程方式填写所有值,然后单击对话框上的“确定”按钮,但它需要填写所有值,并且有很多值,因此非常耗时。此对话框的目的是创建配置文件,我可以在安装后稍后手动创建。

有没有办法完成这项任务?

3 个答案:

答案 0 :(得分:1)

听起来你遇到的主要问题是围绕文本字段的验证进行最终运行。正如您所说,您稍后将编辑配置文件,只需在每个框中添加一些虚拟值,然后单击确定导致验证发生的方式。

答案 1 :(得分:1)

有时候你需要改变一个糟糕的设计,不再需要做一个艰巨的任务,而是继续对抗系统。

UI由一个进程拥有,除自动化测试外,只应由该进程或用户进行更改。

答案 2 :(得分:1)

曾经有安装工具包针对系统管理员,它会在运行安装程序时观察注册表和文件系统,然后创建自定义MSI文件以自动执行该过程。这可能是你走的另一种方式。