6.22打包建立ISS虚拟目录,安装完运行你想运行的程序

http://installshield.jaron.cn/forum/dispbbs.asp?boardID=3&ID=284614&page=1
#include "ifx.h"  
#define Emty  "" //宏定义DOS功能把Emty 替换为""  
prototype RegUnInstall(STRING);
string szDir, szVirtual;
prototype void CheckRequirements(); //检测系统必备.net和iis  
prototype void CreateVirtualDir(STRING,string);//创建虚拟目录 参数1虚拟目录名 参数2物理路径

function OnFirstUIBefore()    
    number  nResult,nSetupType;
    string  szName, szCompany;
    string  szTargetPath;
    string  szComponents, szTargetdir;
    number  nLevel;
    LIST    listStartCopy;
    number  nvSize;  
  
begin
     CheckRequirements();
Dlg_SdWelcome:  

    SetTitle (@TITLE_CAPTIONBAR, 0, BACKGROUNDCAPTION);        
    nResult = SdWelcome( "欢迎使用爱普管理系统安装向导","以下将在你的计算机上安装开源爱普ERP,若要继续安装,请点击下一步......" );
  
    Dlg_SdLicense:  
      
  
    nResult= SdLicense( Emty, Emty, Emty,  SUPPORTDIR ^ "license.txt" );
    if (nResult = BACK) goto Dlg_SdWelcome;

Dlg_SdRegisterUserEx:
  
    nResult = SdRegisterUser( Emty, Emty, szName, szCompany );
    if (nResult = BACK) goto Dlg_SdLicense;

Dlg_SdAskDestPath:
    TARGETDIR = PROGRAMFILES^@PRODUCT_NAME;
    szDir = TARGETDIR;  
    nResult = AskDestPath( Emty, Emty, szDir,0 );
    TARGETDIR = szDir;
    if (nResult = BACK) goto Dlg_SdRegisterUserEx;

Dlg_SetupType:  
      
       nSetupType = TYPICAL; //默认安装类型
    nResult = SetupType ( Emty , Emty , Emty , nSetupType , 0 );
    if (nResult = BACK) then
        goto Dlg_SdAskDestPath;
    else
        nSetupType = nResult;
        if (nSetupType != CUSTOM) then
        szTargetPath = TARGETDIR;
        nvSize = 0;
        ComponentCompareSizeRequired(MEDIA,szTargetPath,nvSize);
        if (nvSize != 0) then      
                MessageBox( szSdStr_NotEnoughSpace, WARNING );
            goto Dlg_SetupType;
            endif;
        endif;  
    endif;

Dlg_SdComponentTree:
    if ((nResult = BACK) && (nSetupType != CUSTOM)) goto Dlg_SetupType;      
    szTargetdir = TARGETDIR;
    szComponents = "";
    nLevel = 2;
    if (nSetupType = CUSTOM) then
      nResult = SdComponentTree(Emty, Emty, szTargetdir, szComponents, nLevel);
      if (nResult = BACK) goto Dlg_SetupType;  
    endif;
    
Dlg_AskText :  
szVirtual=@PRODUCT_NAME;    
SetDialogTitle(DLG_ASK_TEXT,Emty);
nResult=SdShowDlgEdit1 ("设置虚拟目录", "请输入虚拟目录名,安装程序将设置IIS信息服务.\n如果您没有填写,安装程序将按默认方式创建!","虚拟目录名称:",szVirtual);

Dlg_SdStartCopy:
    if (szVirtual = "") then
  MessageBox ("请输入虚拟目录的名称!",INFORMATION) ;  
  goto   Dlg_AskText;

  endif;

   listStartCopy = ListCreate( STRINGLIST );
    ListAddString(listStartCopy,"用户名:"+szName,AFTER);
     ListAddString(listStartCopy,"公司名称:"+szCompany,AFTER);  
    ListAddString(listStartCopy,"目标目录:"+szDir,AFTER);  
    ListAddString(listStartCopy,"请确认您填写的信息,按下一步开始复制文件",AFTER);
    nResult = SdStartCopy( "", "", listStartCopy );
    ListDestroy(listStartCopy);

    if (nResult = BACK) goto Dlg_SdComponentTree;          
     SetStatusWindow(0, "");
       Enable(STATUSEX);
       StatusUpdate(ON, 100);
         return 0;
end;

function OnMoving()
    string szAppPath;
begin
     RegUnInstall("");
    szAppPath = TARGETDIR;
    RegDBSetItem(REGDB_APPPATH, szAppPath);
    RegDBSetItem(REGDB_APPPATH_DEFAULT, szAppPath ^ @PRODUCT_KEY);
end;  

function void CheckRequirements()  
begin  
SdShowMsg ("安装程序正在检测系统必备组件......",TRUE);
Delay(1);  
SdShowMsg (Emty,FALSE);
RegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE );
if (RegDBKeyExist ("System\\CurrentControlSet\\Services\\IISADMIN" ) != 1) then
  if(SprintfBox(MB_OK,"检测系统环境","你的计算机没有被安装IIS,请安装后重试,安装程序将退出!")=IDOK)
then exit;  
endif;  
endif;
if (RegDBKeyExist ("SOFTWARE\\Microsoft\\.NETFramework\\policy\\v1.1" ) != 1) then        
  if(LaunchAppAndWait ( SUPPORTDIR ^"dotnetfx.exe" , "/q:a/l" ,WAIT)<0) then
     SprintfBox(MB_OK,".NET安装","安装.net框架时发生意外,请重新安装!");
   endif;
   endif;      
end;  

function  void CreateVirtualDir(VirtualFolder, szDir)

begin
if (VirtualFolder = "") then
MessageBox ("请输入虚拟目录的名称!",INFORMATION) ;
else
SdShowMsg (" 正在创建虚拟目录"+VirtualFolder+"请不要关闭....", TRUE);
Delay(1);
LaunchAppAndWait(SUPPORTDIR^"Create.exe", VirtualFolder+" \""+TARGETDIR+"\" ",WAIT);

//AddFolderIcon (FOLDER_DESKTOP , "爱普管理系统" ,"http://localhost"^VirtualFolder^"Default.aspx" ,Emty, Emty, 0, Emty, REPLACE|RUN_MINIMIZED);
  //这里不知道为什么 只要创建快捷方式就很卡 得等待很久
//AddFolderIcon ( FOLDER_PROGRAMS , "爱普管理系统" ,"http://localhost"^VirtualFolder^"Default.aspx" ,Emty, Emty, 0, Emty, REPLACE|RUN_MINIMIZED);
SdShowMsg (Emty,FALSE);
endif;

end;


function RegUnInstall(szKey)
   STRING svUninstLogFile;  
begin

    //反安装的注册

       InstallationInfo(@COMPANY_NAME, @PRODUCT_NAME, @PRODUCT_VERSION, @PRODUCT_KEY);

       DeinstallStart(TARGETDIR, svUninstLogFile, "", 0);

       RegDBSetItem(REGDB_UNINSTALL_NAME, @PRODUCT_NAME);

       DeinstallSetReference (TARGETDIR ^ @PRODUCT_KEY);    

end;    


function OnFirstUIAfter()
      
     NUMBER bOpt1, bOpt2,nResult, nDefOptions;
    
     begin  
     Disable(STATUSEX);
     CreateVirtualDir(szVirtual, szDir);//这里会出现Dos窗口
     if (!BATCH_INSTALL) then
     bOpt1 = FALSE;
     bOpt2 = TRUE;
    
     nResult = SdFinish( "安装完成","已经成功安装爱普管理系统,单击完成以退出安装向导", Emty, "阅读Readme文件", "立刻运行程序", bOpt1, bOpt2 );
    
     if bOpt1 = TRUE then
     CopyFile (SUPPORTDIR^"Readme.txt" , "Readme.txt" );
     LaunchApp ( WINDIR^"Notepad.exe" , TARGETDIR^"Readme.txt" );
     endif;
     if  bOpt2=TRUE then
      LaunchAppAndWait(SUPPORTDIR^"IEXPLORE.EXE","localhost"^szVirtual^"default.aspx",NOWAIT) ;
      endif;
      return 0;
     endif;

    end;

function OnMaintUIAfter()
    STRING szTitle, szMsg1, szMsg2, szOption1, szOption2;
    NUMBER bOpt1, bOpt2;
begin
Disable(STATUSEX);

    ShowObjWizardPages(NEXT);

bOpt1   = FALSE;
    bOpt2   = FALSE;
    szMsg1  = SdLoadString(IFX_SDFINISH_MAINT_MSG1);
szTitle = SdLoadString(IFX_SDFINISH_MAINT_TITLE);
    SdFinishEx(szTitle, szMsg1, szMsg2, szOption1, szOption2, bOpt1, bOpt2);
end;


下面这个是建ISS虚拟目录用到的CREATE.EXE的源代码

#include<stdio.h>
#include <stdlib.h>
char *  concat(const char * dos,const char * argv)
{char *str;
int i,j,dos_len,argv_len,length;
dos_len=strlen(dos);
argv_len=strlen(argv);
length=dos_len+argv_len;
str=(char *)malloc(length+1);
  for(i=0,j=argv_len;i<dos_len||j>=0;)
{
  if(i<dos_len)  
    str[i]=dos[i++];
  if(j>=0)
   str[length--]=(argv)[j--];
}

  return str;
}
main(int argc, char* argv[])
{
if(argc>2)
{
char *str=concat("@cscript.exe %SystemDrive%/Inetpub/AdminScripts/adsutil.vbs delete w3svc/1/root/",*++argv);  
system("@echo off");
system(str);
free(str);
str=concat("@cscript.exe %SystemDrive%/Inetpub/AdminScripts/adsutil.vbs create_vdir w3svc/1/root/",*argv);
system(str);
free(str);
str=concat("@cscript.exe %SystemDrive%/Inetpub/AdminScripts/adsutil.vbs set w3svc/1/root/",*argv);
str=concat(str,"/path \"");
str=concat(str,*++argv);
str=concat(str,"\"");
system(str);
free(str);
str=concat("@cscript.exe %SystemDrive%/Inetpub/AdminScripts/adsutil.vbs APPCREATEPOOLPROC w3svc/1/root/",*--argv);
system(str);
free(str);
str=concat("@cscript.exe %SystemDrive%/Inetpub/AdminScripts/adsutil.vbs set w3svc/1/root/",*argv);
str=concat(str,"/AccessScript TRUE");
system(str);
free(str);
str=concat("@cscript.exe %SystemDrive%/Inetpub/AdminScripts/adsutil.vbs set w3svc/1/root/",*argv);
str=concat(str,"/AccessFlags 513");
system(str);
free(str);
str=concat("@cscript.exe %SystemDrive%/Inetpub/AdminScripts/adsutil.vbs set w3svc/1/root/",*argv);
str=concat(str,"/AuthFlags 5");
system(str);
free(str);
str=concat("@cscript.exe %SystemDrive%/Inetpub/AdminScripts/adsutil.vbs set w3svc/1/root/",*argv);
str=concat(str,"/DefaultDoc \"Default.aspx\"");
system(str);
free(str);
system("@cls");
system("@exit");
}
}

转载于:https://www.cnblogs.com/draeag/archive/2007/07/07/809606.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/381733.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UVA 11991——Easy Problem from Rujia Liu?

题意&#xff1a;给定一个数组&#xff0c;然后有若干组询问&#xff0c;每次询问求第k个v出现的位置。 思路&#xff1a;用vector构造模拟&#xff0c;吧相同的数的位置放在同一个vector里&#xff0c;对于每次查询输出mp[v][x-1]; code&#xff1a; #include <bits/stdc.h…

压缩图片上传到数据库

保存到数据库public int DyfcListInsert(int id,string name,string username,string content,Byte[] photo) { string sql "S_DyfcList_Insert"; SqlCommand sqlcmd new SqlCommand(sql,DwzxConfiguration.ConnectDB() ,DwzxConfigu…

支持.NET的分布式缓存系统memcached

http://www.infoq.com/news/2007/07/memcached 转载于:https://www.cnblogs.com/didasoft/archive/2007/07/17/821766.html

UVA 1160——X-Plosives

题意&#xff1a;给定一些化合物&#xff08;含有两个元素&#xff09;&#xff0c;当满足k个化合物且有k个元素的时候会发生爆炸&#xff0c;问多少个化合物是不能装车的。 思路&#xff1a;并查集的简单应用。实际上满足条件的时候是一个环&#xff0c;因此用并查集简单判环即…

UVA 1329——Corporative Network

题意&#xff1a;有n个节点&#xff0c;然后执行I u&#xff0c;v&#xff08;把u的父节点设为v&#xff09;和E u&#xff08;询问u到根节点的距离&#xff09;。 思路&#xff1a;并查集。加了信息的并查集&#xff0c;在路径压缩的同时维护距离d[i]; code&#xff1a; #inc…

Atlas 不仅仅是异步

最近学习研究了一下微软的AJAX框架,Atlas.这个框架对于实现AJAX里的异步请求,无刷新等技术非常的简便,功能也很强大,当然这些都是建立在DOTNET平台上. 对于这个框架,给我印象很深的就是,作为一个新的框架,能够与现有的ASP.NET技术实现几乎无缝的整合,并且只需要添加若干行…

UVA 11988——Broken Keyboard (a.k.a. Beiju Text)

题意&#xff1a;给定一个字符串&#xff0c;然后【会将光标跳转到头&#xff0c;】会将光标调到尾&#xff0c;问最后正确的输入。 思路&#xff1a;直接用list来模拟即可&#xff0c;【的时候就在头插&#xff0c;】就在尾插&#xff0c;也可根据递归顺序解。 code&#xff1…

使用CodeDom生成程序集

usingSystem;usingMicrosoft.CSharp;usingSystem.CodeDom.Compiler;usingSystem.CodeDom;namespaceTest.CUI{ class Program { static void Main() { // 创建编译器对象 CSharpCodeProvider p new CSharpCodeProvider(); ICodeCompiler cc p.CreateCo…

UVA 11136——Hoax or what

题意&#xff1a;超市搞促销&#xff0c;每天都从箱子里拿出最大和最小的差作为促销金额&#xff0c;给出n天的促销情况&#xff0c;问最后总的促销金额。 思路&#xff1a;set构造&#xff0c;当有小票的时候放入set&#xff0c;每天结束的时候取出头和尾即可。 code&#xff…

SQL Server与Oracle、DB2三种数据库比较

开发数据库应用&#xff0c;选择一个好的数据库是非常重要的。本文从一些方面比较了SQL Server与Oracle、DB2三种数据库&#xff0c;为你选择数据库提供一些参考。开放性 SQL Server只能在Windows 上运行&#xff0c;没有丝毫的开放性&#xff0c;操作系统的系统的稳定对数据库…

汇编语言——第1次上机实验

准备&#xff1a; 硬件&#xff1a;pc机&#xff0c;32位win操作系统&#xff0c;能够运行dos&#xff0c;某些64位win10系统可能会不支持 软件&#xff1a;masm程序 实验内容&#xff1a; 1.winr运行dos&#xff0c;cd到指定的masm目录&#xff08;为了调试方便&#xff0c;所…

codeforce 185 A——Plant

题意&#xff1a;给定一个大三角形&#xff0c;然后每次按照图片分割成4个小三角形&#xff0c;问n次后有多少个向上的三角形。 思路&#xff1a;矩阵快速幂&#xff0c;可以发现&#xff0c;每一个向上的的可以在下一次产生3个向上的&#xff0c;1个向下的&#xff0c;向下的每…

uva 10534——Wavio Sequence

题意&#xff1a;给定一个序列&#xff0c;求一个最长的序列&#xff0c;使得他的前半部分是递增的&#xff0c;而后半部分是递减的&#xff0c;且两部分的长度一样。 思路&#xff1a;经典的LIS问题&#xff0c;和openjudge登山问题一样&#xff0c;前后各扫一遍&#xff0c;找…

在asp.net中调用process.start执行程序

试了N次,发现不行,原来需要设置运行iis进程用户的权限,比较麻烦, MS的站点上有一篇说明:http://support.microsoft.com/default.aspx/kb/555134再找了找,可以先执行cmd.exe,然后以参数形式调用bat文件即可,参考文章:http://codebetter.com/blogs/brendan.tompkins/archive/2004…

UVA 11584—— Partitioning by Palindromes

题意&#xff1a;给定一个串&#xff0c;然后问最少可以分割成多少个回文串。 思路&#xff1a;简单dp&#xff0c;dp[i]min(dp[j]1,1<j<i),两次循环扫一遍即可&#xff0c;考察dp的思想。 code&#xff1a; #include <bits/stdc.h> using namespace std;const int…

UVA 10635——Prince and Princess

题意&#xff1a;给定两个长度为p1和q1的序列&#xff0c;求两个序列的LCS。 思路&#xff1a;如果直接使用朴素的LCS算法则O&#xff08;pq&#xff09;会超时&#xff0c;可以把A中出现的元素编码&#xff0c;然后映射到B&#xff08;只保留AB都存在的元素&#xff09;&…

Windows环境下smarty安装简明教程

整个配置过程分为九步走&#xff0c;文章看起来比较长&#xff0c;那是因为站长对每一个步骤都给出了没法再详细的解释&#xff0c;非常浅显&#xff0c;绝对是名副其实的“最简明教程”。按照这个教程&#xff0c;智商大于零的用户都能顺利配置好Smarty!~_~ 本文适用平台&…

UVA 10891——Game of Sum

题意&#xff1a;给定一个长度为n的序列&#xff0c;两个人分别从两端开始取若干数&#xff0c;但是规定要么左&#xff0c;要么右&#xff0c;问双方都采取最优策略下A的总和减去B的值。 思路&#xff1a;区间dp&#xff0c;dp&#xff08;i&#xff0c;j)表示先手的总和&…

SQL 分页存储过程(转)

因为邹建的分页存储过程不能返回记录总数&#xff0c;所以每次分页还又要统计一次&#xff0c;所以自己在里面加了个返回记录数&#xff0c;这下就好用了。 iPageCount int OUTPUT --定义输出变量&#xff0c;放在QueryStr上面 .... exec(selectFdShowfromQueryStrFdOrder) --…

[转]javascript小技巧,超强推荐

事件源对象event.srcElement.tagName event.srcElement.type 捕获释放event.srcElement.setCapture(); event.srcElement.releaseCapture(); 事件按键event.keyCode event.shiftKey event.altKey event.ctrlKey 事件返回值event.returnValue 鼠标位置event.x event.y 窗体活动元…