SendMessage(this.Handle, WM_DESTROY, ERROR_INSTALL_USEREXIT, 0);我在c#程序里调用上面的函数取消安装,但是没有起作用,这是为什么?

解决方案 »

  1.   

    贴你的声明代码,这需要dllimport
      

  2.   

    我在安装包里嵌入了一个form,在这个form里做一些事情,然后判断是否要退出安装;[DllImport("User32.dll", EntryPoint = "SendMessage")]
    private static extern int SendMessage(IntPtr hwnd, uint wMsg, int wParam, int lParam); const uint WM_DESTROY = 0x0002;
     const int ERROR_INSTALL_USEREXIT = 1602;
     const int ERROR_SUCCESS = 0;
      

  3.   

    在这个安装过程中,我发送系统消息SendMessage(this.Handle, WM_DESTROY, ERROR_INSTALL_USEREXIT, 0);
    目的是取消安装,但是没有起作用
      

  4.   

    句柄没有错误啊,窗口能正常被销毁,只是这个消息‘ERROR_INSTALL_USEREXIT’没有被接受
      

  5.   

    好像是句柄错误,那请问如何获取MSIHANDLE
      

  6.   

    通过findwindow 找到了安装程序的句柄,但是发送sendmessage还是不起作用
      

  7.   

    使用posemessage,想发送按键之类的要用postmessage
      

  8.   

    [DllImport("user32.dll", EntryPoint = "PostMessage", SetLastError = true)]
    private static extern bool PostMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);SendMessage发送消息给应用程序后,还要等待返回信息,而PostMessage只管发送消息给应用程序,如果说点击一个按钮,使用SendMessage发送消息,是不会返回任何信息的,所以SendMessage就不起作用了。//发送回车键
     PostMessage(mainHwnd, WM_KEYDOWN, 13, 0);
    PostMessage(mainHwnd, WM_KEYUP, 13, 0);
      

  9.   

    说错了。 SendMessage(edithWnd, WM_CLICK, (IntPtr)0, "0");可发送点击事件。
      

  10.   

    我是说取消安装‘ERROR_INSTALL_USEREXIT’ 没有被执行