inno setup脚本 检测硬盘dll插件

有关inno setup 调用dll问题
[问题点数:100分,结帖人qipeng3875]
有关inno setup 调用dll问题
[问题点数:100分,结帖人qipeng3875]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2014年3月 C++ Builder大版内专家分月排行榜第二2014年1月 C++ Builder大版内专家分月排行榜第二2013年12月 C++ Builder大版内专家分月排行榜第二2013年8月 C++ Builder大版内专家分月排行榜第二2013年7月 C++ Builder大版内专家分月排行榜第二2013年4月 Delphi大版内专家分月排行榜第二
2013年11月 C++ Builder大版内专家分月排行榜第三2013年9月 C++ Builder大版内专家分月排行榜第三2013年6月 C++ Builder大版内专家分月排行榜第三2013年3月 Delphi大版内专家分月排行榜第三
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。酷勤网 C 程序员的那点事!
当前位置: >
浏览次数:次
0、调用DOS命令或批处理等其它命令行工具等
Exec(ExpandConstant('{cmd}'), '/c dir c: &a.txt',ExpandConstant('{app}'), SW_SHOWNORMAL, ewNoWait, ResultCode);
1、不显示一些特定的安装界面
function ShouldSkipPage(PageID: Integer): B
if PageID=wpReady then
wpReady 是准备安装界面
PageID查询 INNO帮助中的 Pascal 脚本: 事件函数常量
预定义向导页 CurPageID 值
wpWelcome, wpLicense, wpPassword, wpInfoBefore, wpUserInfo, wpSelectDir, wpSelectComponents, wpSelectProgramGroup, wpSelectTasks, wpReady, wpPreparing, wpInstalling, wpInfoAfter, wpFinished
如果是自定义的窗体,则PageID可能是100,你可以在curPageChanged(CurPageID: Integer)方法中打印出到curpageid到底是多少。
2、获取SQLserver安装路径
rtn := RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWAREMicrosoftMSSQLServerSetup','SQLPath', dbpath);
if (!rtn) then dbpath := ExpandConstant('{app}');
3、获取本机的IP地址
//{-18F0-4F92-1FCF1BF}视网卡而定见LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionNetworkCards处
rtn :=RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SYSTEMCurrentControlSetServices{-18F0-4F92-1FCF1BF}ParametersTcpIp','IpAddress', ip);
if (not rtn) or (ip='0.0.0.0') or (ip='') then ip := '127.0.0.1';
4、检查数据库是否安装
//检查是否已安装SQL
CreateOleObject('SQLDMO.SQLServer');
RaiseException('您还没有安装SQL数据库.'#13#13'(Error ''' + GetExceptionMessage + ''' occurred)');
5、根据环境变量选择组件,获取系统环境变量值见方法6
procedure CurPageChanged(CurPageID: Integer);
//MsgBox(inttostr(curpageid),mbInformation,mb_ok);
if (curpageId =7) then
rtn := checkTomcat6(path);
if rtn then//如果系统以前没安装tomcat则选中组件,否则不选中
<ponentsList.CheckItem(2,coUnCheck);
<ponentsList.ItemEnabled[2] :=
6、系统环境变量操作
function GetEnv(const EnvVar: String): S
举例:GetEnv('java_home')
ChangesEnvironment=true
//环境变量名、值、是否安装(删除)、是否所有用户有效
procedure SetEnv(aEnvName, aEnvValue: aIsInstall: Boolean);//设置环境变量函数
sOrgValue:
//得到以前的值
RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SYSTEMCurrentControlSetControlSession ManagerEnvironment', aEnvName, sOrgValue)
sOrgValue := Trim(sOrgValue);
x := pos( Uppercase(aEnvValue),Uppercase(sOrgValue));
len := length(aEnvValue);
if aIsInstall then//是安装还是反安装
if length(sOrgValue)&0 then aEnvValue := ';'+ aEnvV
if x = 0 then Insert(aEnvValue,sOrgValue,length(sOrgValue) +1);
if x&0 then Delete(sOrgValue,x,len);
if length(sOrgValue)=0 then
RegDeleteValue(HKEY_LOCAL_MACHINE, 'SYSTEMCurrentControlSetControlSession ManagerEnvironment',aEnvName);
StringChange(sOrgValue,';;',';');
RegWriteStringValue(HKEY_LOCAL_MACHINE, 'SYSTEMCurrentControlSetControlSession ManagerEnvironment', aEnvName, sOrgValue)
7、获取NT服务安装路径
Windows服务在系统安装后会在注册表的 &HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices&下
以服务的ServiceName建1个目录,
目录中会有&ImagePath&
举例获取tomcat6服务安装路径:
RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SYSTEMCurrentControlSetServicestomcat6','ImagePath', sPath);
解决安装客户需要重启:
[Code] //不重启 function InitializeSetup(): B var ResultCode: I begin Result := F if ParamCount &= 1 then Exec(ExpandConstant('{cmd}'), ExpandConstant('/c &&{srcexe}&& /sp- /norestart'), '', SW_HIDE, ewNoWait, ResultCode) else Result := T
跳过 INNO 安装程序的&欢迎&页面 在脚本中添加[Code]如下 [Code] //跳过 INNO 安装程序的&欢迎&页面 const WM_LBUTTONDOWN = 513; WM_LBUTTONUP = 514; procedure InitializeWizard(); begin PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONDOWN,0,0); PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONUP,0,0); // 选择单选框NO不重启按钮 WizardForm.YesRadio.Checked := FALSE; WizardForm.NoRadio.Checked := TRUE;
要求是WINDOWS管理员身份才能安装客户端(支持XP以上全部系统)
[Setup] PrivilegesRequired=admin 通过psvince.dll插件判断MEETING是否正在运行 先复制psvince.dll到Inno Setup 安装目录,然后添加代码。 [Files] ;判断进程用DLL文件(邮件附件) Source: compiler:psvince. Flags: dontcopy noencryption [Code] //增加判断是否存在程序-------------------------------------------------------- function IsModuleLoaded(modulename: String ): B external 'IsModuleLoaded@files:psvince.dll stdcall'; function InitializeSetup(): var IsAppRunning: begin Result:= IsAppRunning:= IsModuleLoaded('ActiveMeeting.exe'); //程序文件名 while IsAppRunning do begin if MsgBox('网动视频会议系统 正在运行,继续安装前请先关闭它!'#13'强烈建议您先【关闭程序】,再进行安装' #13#13 '要继续安装吗?', mbConfirmation, MB_OKCANCEL) = IDOK then IsAppRunning:= IsModuleLoaded('ActiveMeeting.exe') //程序文件名 else begin IsAppRunning:= Result:=
& 相关主题:
本文来源:以前编写的inno setup脚本,涵盖了自定义安装界面,调用dll等等应用
以前编写的inno setup脚本,涵盖了自定义安装界面,调用dll等等应用
[摘要:; Script generated by the Inno Setup 剧本领导. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! ; 为1的时间透露表现界说成试用版本 #define VERSION_TYPE ReadIni('Setup.ini', 'SetupType', 'type', '0') #if V]
; Script generated by the Inno Setup 脚本向导. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! 为1的时候表示定义成试用版本 #define VERSION_TYPE ReadIni('Setup.ini', 'SetupType', 'type', '0')
#if VERSION_TYPE == &2&
#define LIVE_VERSION
#define MyAppName &流媒体系统(PMS)&
#define MyAppId &2-46F1-B732-8DDF96693DA5&
#define MyOutputBaseFilename &live_server_setup& #elif VERSION_TYPE == &1&
#define VOD_VERSION
#define MyAppName &流媒体系统(PMS)&
#define MyAppId &DA3--B9A7EF4CBC1B&
#define MyOutputBaseFilename &vod_server_setup& #else
#define FULL_VERSION
#define MyAppName &流媒体系统(PMS)&
#define MyAppId &4AC618B5-8C69-4D47-918A-261AA895B6D7&
#define MyOutputBaseFilename &full_server_setup& #endif
#define RegUrl &http://www.xxx.net& #define MyAppVersion &1.0& #define MyAppPublisher &XXX科技有限公司& #define MyAppURL &http://www.xxx.net& #define MyAppExeName &InstanceConfig.exe&
[Setup] ; NOTE: The value of AppId uniquely identifies this application. ; Do not use the same AppId value in installers for other applications. ; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) AppId={{{#MyAppId}} AppMutex={{{#MyAppId}} AppName={#MyAppName} AppVersion={#MyAppVersion} AppPublisher={#MyAppPublisher} AppPublisherURL={#MyAppURL} AppSupportURL={#MyAppURL} AppUpdatesURL={#MyAppURL} DefaultDirName={pf}xxxmedia server DefaultGroupName={#MyAppName} AllowNoIcons=yes LicenseFile=license.txt OutputDir=output OutputBaseFilename={#MyOutputBaseFilename} SetupIconFile=setup.ico Compression=lzma SolidCompression=yes
VersionInfoVersion={#MyAppVersion} VersionInfoCompany={#MyAppPublisher} VersionInfoCopyright=Copyright (C)
VersionInfoProductName={#MyAppName} VersionInfoProductVersion={#MyAppVersion}
[Languages] Name: MessagesFile: compiler:Languageschinese.isl
[Files] ; NOTE: Don't use &Flags: ignoreversion& on any
用来检测安装程序中输入的注册码是否有效 Source: ..buildregister_help. Flags: dontcopy Source: ..buildlibeay32. Flags: dontcopy Source: ..buildvcredist2008_x86. Flags: dontcopy
#ifdef FULL_VERSION Source: ..buildserver. DestDir: {app} Source: ..buildmedia_service. DestDir: {app} Source: ..buildlibmysql. DestDir: {app} Source: ..buildlibeay32. DestDir: {app} Source: ..buildzlib1. DestDir: {app} Source: ..buildregister_check. DestDir: {app} Source: ..buildQtCore4. DestDir: {app} Source: ..buildQtGui4. DestDir: {app} Source: ..buildmglobal. DestDir: {app} Source: ..buildmsvcp100. DestDir: {app} Source: ..buildmsvcr100. DestDir: {app} Source: ..buildinitconfig. DestDir: {app} Source: ..buildInstanceConfig. DestDir: {app} ;Source: ..buildphp-fpm. DestDir: {app} Source: ..build管理统计页面. DestDir: {app} Source: ..build示例页面. DestDir: {app}
Source: .. DestDir: {app} ;Source: .. DestDir: {app}
Source: ..buildlighttpd. DestDir: {app} Flags: ignoreversion Source: ..buildmy. DestDir: {app} Flags: web服务器整套目录 Source: ..buildlmp*; DestDir: {app} Flags: recursesubdi doc文档目录 Source: ..doc*; DestDir: {app} Flags: recursesubdi 播放器相关目录 Source: ..buildswfs*; DestDir: {app} Flags: recursesubdi 播放器SDK相关目录 Source: ..buildscriptlib*; DestDir: {app} Flags: recursesubdirs createallsubdirs
[Dirs] Name: {app}videos
[Tasks] Name: Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}
[Icons] Name: {group}sample示例页面; Filename: {app}示例页面.url
Name: {group}help安装说明; Filename: {app}help安装说明.pdf Name: {group}help功能说明; Filename: {app}help功能说明.pdf Name: {group}help开发说明; Filename: {app}help开发说明.pdf Name: {group}help配置说明; Filename: {app}help配置说明.pdf Name: {group}help统计模块; Filename: {app}help统计模块.pdf
Name: {group}流媒体系统(PMS)系统配置; Filename: {app}{#MyAppExeName} Name: {group}{cm:UninstallProgram, PMS系统配置}; Filename: {uninstallexe} Name: {group}流媒体系统(PMS)统计管理; Filename: {app}管理统计页面. IconFilename: {app}{#MyAppExeName}; Name: {commondesktop}流媒体系统(PMS)统计管理; Filename: {app}管理统计页面. Tasks: IconFilename: {app}{#MyAppExeName}; Name: {commondesktop}流媒体系统(PMS)系统配置; Filename: {app}{#MyAppExeName}; Tasks: desktopicon Name: {commondesktop}开启PMS服务; Filename: {app}media_service. Parameters: -r; IconFilename: {app}{#MyAppExeName}; Tasks: desktopicon Name: {commondesktop}停止PMS服务; Filename: {app}media_service. Parameters: -s; IconFilename: {app}{#MyAppExeName}; Tasks: desktopicon
[Run] ; 删除服务 Filename: {app}media_service. Parameters: -u; Flags: 安装服务 Filename: {app}media_service. Parameters: -i; Flags: runhidden
[UninstallRun] ; 停止服务 Filename: {app}media_service. Parameters: -s; Flags: 删除服务 Filename: {app}media_service. Parameters: -u; Flags: runhidden
[CustomMessages] Key_Form_Caption=注册向导 Key_Form_Description=将序列号提交给xxx以获取注册码 Key_Form_codeLabel_Caption0=序列号: Key_Form_keyLabel_Caption0=注册码:
Domain_Form_Caption=域名设置 Domain_Form_Description=配置当前服务器域名
[Messages] BeveledLabel=xxx网络科技
[Code] var
codeLabel: TL
keyLabel: TL
keyPage: TWizardP
domainEdit: TNewE
domainPage: TWizardP
// 获取序列号 function getCode(szCode: PC inLen: Integer): I external 'getCode@files:register_help.dll,libeay32.dll,msvcr100.dll stdcall setuponly delayload loadwithalteredsearchpath';
// 进行检查 function regCheck(const regKey: PChar): B external 'regCheck@files:register_help.dll,libeay32.dll,msvcr100.dll stdcall setuponly delayload loadwithalteredsearchpath';
// 进行注册 function regSave(const regKey, regPath: PChar): B external 'regSave@files:register_help.dll,libeay32.dll,msvcr100.dll stdcall setuponly delayload loadwithalteredsearchpath';
// 清理注册 procedure regClear(const regPath: PChar); external 'regClear@files:register_help.dll,libeay32.dll,msvcr100.dll stdcall setuponly delayload loadwithalteredsearchpath';
function OpenSCManager(const machine: LongI const dbName: LongI
access: Dword):LongI external 'OpenSCManagerA@Advapi32.dll stdcall';
function OpenService(svcMgr: LongI const svcName:
access: Dword):LongI external 'OpenServiceA@Advapi32.dll stdcall';
function CloseServiceHandle(svc: LongInt):B external 'CloseServiceHandle@Advapi32.dll stdcall';
///判定服务是否存在 function
serviceExists(name: string): var
SvcMgr, Svc: LongI begin
Result := F
SvcMgr := OpenSCManager(0,0,1);
if SvcMgr = 0 then E
Svc := OpenService(SvcMgr, PChar(name), 4);
if Svc = 0 then
CloseServiceHandle(SvcMgr);
CloseServiceHandle(Svc);
CloseServiceHandle(SvcMgr);
///停止服务 procedure stopS var
ResultCode: I begin
Exec(ExpandConstant('{tmp}media_service.exe'), '-s', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
{ Key_Form_ShouldSkipPage }
function Key_Form_ShouldSkipPage(Page: TWizardPage): B var
codeStr: S begin
SetLength(codeStr, 1024);
getCode(PChar(codeStr), 1024);
code.Text := codeS
Result := F
// 注册码编辑框改变事件 procedure Key_Form_KeyChange(Sender: TObject); begin // 检测注册码
if regCheck(PChar(key.Text)) then
WizardForm.NextButton.Enabled := True
WizardForm.NextButton.Enabled := F
procedure RegURLLabelOnClick(Sender: TObject); var
ErrorCode: I begin
ShellExec('open', ExpandConstant('{#RegURL}'), '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
{ Key_Form_CreatePage } function Key_Form_CreatePage(PreviousPageId: Integer): I var
URLLabel: TNewStaticT begin
keyPage := CreateCustomPage(
PreviousPageId,
ExpandConstant('{cm:Key_Form_Caption}'),
ExpandConstant('{cm:Key_Form_Description}')
{ codeLabel }
codeLabel := TLabel.Create(keyPage);
with codeLabel do
Parent := keyPage.S
Caption := ExpandConstant('{cm:Key_Form_codeLabel_Caption0}');
Left := ScaleX(0);
Top := ScaleY(0);
Width := ScaleX(40);
Height := ScaleY(13);
{ keyLabel }
keyLabel := TLabel.Create(keyPage);
with keyLabel do
Parent := keyPage.S
Caption := ExpandConstant('{cm:Key_Form_keyLabel_Caption0}');
Left := ScaleX(0);
Top := ScaleY(82);
Width := ScaleX(40);
Height := ScaleY(13);
key := TMemo.Create(keyPage);
with key do
Parent := keyPage.S
Left := ScaleX(0);
Top := ScaleY(98);
Width := ScaleX(410);
Height := ScaleY(106);
ScrollBars := ssV
TabOrder := 0;
OnChange := @Key_Form_KeyC
code := TMemo.Create(keyPage);
with code do
Parent := keyPage.S
Left := ScaleX(0);
Top := ScaleY(16);
Width := ScaleX(410);
Height := ScaleY(60);
ReadOnly := T
ScrollBars := ssV
TabOrder := 1;
with keyPage do
OnShouldSkipPage := @Key_Form_ShouldSkipP
Result := keyPage.ID;
URLLabel := TNewStaticText.Create(keyPage);
with URLLabel do
Caption := '获取注册码';
Cursor := crH
OnClick := @RegURLLabelOnC
Parent := keyPage.S
Font.Style := URLLabel.Font.Style + [fsUnderline];
Font.Color := clB
Left := ScaleX(350);
Top := ScaleY(210);
{ 设置域名页面相关代码 } procedure Domain_Form_EditChange(sender: TObject); begin
if domainEdit.Text = '' then
WizardForm.NextButton.Enabled := False
WizardForm.NextButton.Enabled := T
function Domain_Form_CreatePage(PreviousPageId: Integer): I var
domainLabel: TNewStaticT begin
domainPage := CreateCustomPage(
PreviousPageId,
ExpandConstant('{cm:Domain_Form_Caption}'),
ExpandConstant('{cm:Domain_Form_Description}')
domainLabel := TNewStaticText.Create(domainPage);
with domainLabel do
Parent := domainPage.S
Caption := '请确保输入的域名是有效的,并指向当前服务器IP,否则可以直接填写本机' + #13#10 + 'IP地址,或者保持默认值不变';
Left := ScaleX(0);
Top := ScaleY(60);
Width := ScaleX(400);
Height := ScaleY(28);
domainEdit := TNewEdit.Create(domainPage);
with domainEdit do
Parent := domainPage.S
Text := GetComputerNameS
Left := ScaleX(0);
Top := ScaleY(90);
Width := ScaleX(400);
Height := ScaleY(13);
OnChange := @Domain_Form_EditC
procedure URLLabelOnClick(Sender: TObject); var
ErrorCode: I begin
ShellExec('open', ExpandConstant('{#MyAppURL}'), '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
// 安装初始化 function InitializeSetup(): B begin
if serviceExists('MediaSrv') then
begin //服务存在,先停止它
if MsgBox('服务已经存在,要继续吗?', mbConfirmation, MB_YESNO) = IDNO then
Result := F
ExtractTemporaryFile('media_service.exe');
ExtractTemporaryFile('msvcr100.dll');
ExtractTemporaryFile('msvcp100.dll');
result := T
procedure InitializeWizard(); var
URLLabel: TNewStaticT begin
Key_Form_CreatePage(wpSelectDir);
Domain_Form_CreatePage(keyPage.ID);
URLLabel := TNewStaticText.Create(WizardForm);
with URLLabel do
Caption := ExpandConstant('{#MyAppURL}');
Cursor := crH
OnClick := @URLLabelOnC
Parent := WizardF
Font.Style := URLLabel.Font.Style + [fsUnderline];
Font.Color := clB
Left := ScaleX(20);
Top := WizardForm.ClientHeight - ScaleY(30);
// 页面切换事件 procedure CurPageChanged(CurPageID: Integer); var
ResultCode: I
buf: S begin
WizardForm.BackButton.Enabled := T
if CurPageID = keyPage.ID then
WizardForm.NextButton.Enabled := False
else if CurPageID = wpFinished then
///////////////////////////////////////////////////////////
// 帮助设置HOST_NAME为用户设置的域名
file := ExpandConstant('{app}lmphtdocssampleconfig.php');
if LoadStringFromFile(file, buf) then
StringChangeEx(buf, '%HOST_NAME%', domainEdit.Text, False);
SaveStringToFile(file, buf, False);
file := ExpandConstant('{app}管理统计页面.url');
if LoadStringFromFile(file, buf) then
StringChangeEx(buf, '%HOST_NAME%', domainEdit.Text, False);
SaveStringToFile(file, buf, False);
file := ExpandConstant('{app}示例页面.url');
if LoadStringFromFile(file, buf) then
StringChangeEx(buf, '%HOST_NAME%', domainEdit.Text, False);
SaveStringToFile(file, buf, False);
///////////////////////////////////////////////////////////
// 禁用完成按钮
WizardForm.NextButton.Enabled := F
// 正式写入注册文件
regSave(PChar(key.Text), WizardDirValue);
// 执行自动初始化
Exec(ExpandConstant('{app}initconfig.exe'), '', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
// 执行配置设置
Exec(ExpandConstant('{app}InstanceConfig.exe'), '-r', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
// 启动服务
Exec(ExpandConstant('{app}media_service.exe'), '-r', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
// 启用完成按钮
WizardForm.NextButton.Enabled := T
else if CurPageID = wpInstalling then
// 安装运行时库
ExtractTemporaryFile('vcredist2008_x86.exe');
// 执行2008库安装
Exec(ExpandConstant('{tmp}vcredist2008_x86.exe'), '/q', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
else if CurPageID = domainPage.ID then
WizardForm.BackButton.Enabled := F
// 卸载 procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); begin
if CurUninstallStep = usUninstall then
DeleteFile(ExpandConstant('{app}lsc'));
// 检查重启逻辑 function UninstallNeedRestart(): B begin
if serviceExists('MediaSrv') then
result := True
result := F转自:http://blog.csdn.net/jwybobo2007/article/details/8446290
感谢关注 Ithao123lighttpd频道,是专门为互联网人打造的学习交流平台,全面满足互联网人工作与学习需求,更多互联网资讯尽在 IThao123!
Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。
产品设计是互联网产品经理的核心能力,一个好的产品经理一定在产品设计方面有扎实的功底,本专题将从互联网产品设计的几个方面谈谈产品设计
随着国内互联网的发展,产品经理岗位需求大幅增加,在国内,从事产品工作的大部分岗位为产品经理,其实现实中,很多从事产品工作的岗位是不能称为产品经理,主要原因是对产品经理的职责不明确,那产品经理的职责有哪些,本专题将详细介绍产品经理的主要职责
IThao123周刊inno setup打包, 提示无法导入dll,急
[问题点数:40分]
inno setup打包, 提示无法导入dll,急
[问题点数:40分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2012年4月 VC/MFC大版内专家分月排行榜第一
2012年5月 VC/MFC大版内专家分月排行榜第二2012年3月 VC/MFC大版内专家分月排行榜第二2011年7月 VC/MFC大版内专家分月排行榜第二2011年1月 VC/MFC大版内专家分月排行榜第二2010年12月 VC/MFC大版内专家分月排行榜第二2010年9月 VC/MFC大版内专家分月排行榜第二2010年6月 VC/MFC大版内专家分月排行榜第二2010年5月 VC/MFC大版内专家分月排行榜第二2010年4月 VC/MFC大版内专家分月排行榜第二
本帖子已过去太久远了,不再提供回复功能。}

我要回帖

更多关于 inno setup 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信