如何用c#进行win程序的安装

wwnsx 2006-10-30 11:39:34
安装流程:
运行e:\tm2006preview.exe --->下一步(快捷键Alt+N)-->我同意(快捷键Alt+I)-->下一步(快捷键Alt+N)-->安装(快捷键Alt+I)--等待几分钟--->完成(快捷键Alt+F)

c#代码:
using System;
using System.IO;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Net;
using System.Threading;
using System.Runtime.InteropServices;
using Microsoft.Win32;
using System.Diagnostics;

System.Diagnostics.ProcessStartInfo Info= new System.Diagnostics.ProcessStartInfo();
Info.FileName = "e:\\tm2006preview.exe";
System.Diagnostics.Process Proc ;
Proc = System.Diagnostics.Process.Start(Info);
SendKeys.Send("%(N)"); //这一步没有被执行。
SendKeys.Send("%(I)");
SendKeys.Send("%(N)");
SendKeys.Send("%(I)");
System.Threading.Thread.Sleep(10000);
SendKeys.Send("%(F)");


请问高手以上代码为什么不行?请指点,谢谢。
...全文
179 10 打赏 收藏 举报
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
股神 2006-10-31
  • 打赏
  • 举报
回复
up
Qim 2006-10-30
  • 打赏
  • 举报
回复
用api

findwindow

然后sendmessage

你这个程序的
SendKeys.Send("%(N)"); //这一步没有被执行。
SendKeys.Send("%(I)");
SendKeys.Send("%(N)");
SendKeys.Send("%(I)");
System.Threading.Thread.Sleep(10000);
SendKeys.Send("%(F)");
无效,正是因为你发送的消息是发送到本程序,而不是你用start打开的程序。
wwnsx 2006-10-30
  • 打赏
  • 举报
回复
不是自己做安装程序,而是,运行人家做的win程序.tm2006preview.exe 是腾讯TM的安装程序。
feiyun0112 2006-10-30
  • 打赏
  • 举报
回复
用api

findwindow

然后sendmessage

*****************************************************************************
欢迎使用CSDN论坛阅读器 : CSDN Reader(附全部源代码)
http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
csShooter 2006-10-30
  • 打赏
  • 举报
回复
楼主什么意思?


要自己做安装程序?新建一个基于Installer的DLL,然后添加自定义安装


早起晚睡 2006-10-30
  • 打赏
  • 举报
回复
学习
Qim 2006-10-30
  • 打赏
  • 举报
回复
Proc = System.Diagnostics.Process.Start(Info);//仅仅启动了一个程序

恐怕不行。
wwnsx 2006-10-30
  • 打赏
  • 举报
回复
SendMessage(EdithWnd,WM_CLICK,(IntPtr)0,""); //这一步不能运行
wwnsx 2006-10-30
  • 打赏
  • 举报
回复
[DllImport("User32.dll",EntryPoint="FindWindow")]
private static extern IntPtr FindWindow(string lpClassName,
string lpWindowName);

[DllImport("user32.dll",EntryPoint="FindWindowEx")]
private static extern IntPtr FindWindowEx(IntPtr hwndParent,
IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

[DllImport("User32.dll",EntryPoint="SendMessage")]
private static extern int SendMessage(IntPtr hWnd,
int Msg, IntPtr wParam, string lParam);

const int WM_GETTEXT = 0x000D;
const int WM_SETTEXT = 0x000C;
const int WM_CLICK = 0x00F5;
private void button1_Click(object sender, System.EventArgs e)
{
System.Diagnostics.ProcessStartInfo Info= new System.Diagnostics.ProcessStartInfo();
Info.FileName = "e:\\TM2006Spring.exe";
// Info.WindowStyle=ProcessWindowStyle.Hidden;

System.Diagnostics.Process Proc ;
try
{
//
//启动外部程序
//
Proc = System.Diagnostics.Process.Start(Info);

//下面的这些参数都可以用Spy++查到
string lpszParentClass = "#32770"; //整个窗口的类名
string lpszParentWindow = "TM2006新春版 安装"; //窗口标题
string lpszClass_Submit = "Button"; //需要查找的Button的类名
string lpszName_Submit = "下一步(&N) >"; //需要查找的Button的标题


IntPtr ParenthWnd = new IntPtr(0);
IntPtr EdithWnd = new IntPtr(0);
ParenthWnd = FindWindow(lpszParentClass,lpszParentWindow);
if (!ParenthWnd.Equals(IntPtr.Zero))
{


EdithWnd = FindWindowEx(ParenthWnd,
EdithWnd,lpszClass_Submit,lpszName_Submit);
if (!EdithWnd.Equals(IntPtr.Zero))
{
SendMessage(EdithWnd,WM_CLICK,(IntPtr)0,"");

}



}

}
catch(System.ComponentModel.Win32Exception e1)
{
// Console.WriteLine("系统找不到指定的程序文件。\r{0}", e1);
return;
}
}


上面写的不能用,请高手指点。
wwnsx 2006-10-30
  • 打赏
  • 举报
回复
还是不行啊
发帖
C#

10.8w+

社区成员

.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
帖子事件
创建了帖子
2006-10-30 11:39
社区公告

让您成为最强悍的C#开发者