Commit 4bb186a3 authored by 王炳鑫's avatar 王炳鑫

健康小屋第一版

Signed-off-by: 王炳鑫's avatarwangbingxin <imbald@magicare.me>
parent 2076b2fc
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "RegegitKey.h" #include "RegegitKey.h"
// CConfig 对话框 // CConfig 对话框
#pragma comment(lib, "winspool.lib")
IMPLEMENT_DYNAMIC(CConfig, CDialogEx) IMPLEMENT_DYNAMIC(CConfig, CDialogEx)
...@@ -27,21 +28,79 @@ void CConfig::DoDataExchange(CDataExchange* pDX) ...@@ -27,21 +28,79 @@ void CConfig::DoDataExchange(CDataExchange* pDX)
{ {
CDialogEx::DoDataExchange(pDX); CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_COMBO1, mCombo); DDX_Control(pDX, IDC_COMBO1, mCombo);
DDX_Control(pDX, IDC_COMBO2, mPrinterName);
}
BOOL CConfig::HasPrinters()
{
DWORD Flags = PRINTER_ENUM_FAVORITE | PRINTER_ENUM_LOCAL; //local printers
DWORD cbBuf;
DWORD pcReturned;
DWORD Level = 2;
TCHAR Name[500] ;
LPPRINTER_INFO_2 pPrinterEnum = NULL;
memset(Name,0,sizeof(TCHAR)*500);
::EnumPrinters(Flags, Name, Level, NULL, 0, &cbBuf, &pcReturned);
pPrinterEnum = (LPPRINTER_INFO_2)LocalAlloc(LPTR, cbBuf+4);
if (NULL == pPrinterEnum)
{
TRACE( "Error %1d/n ", GetLastError()) ;
return FALSE;
}
if (!EnumPrinters(
Flags, // DWORD Flags, printer object types
Name, // LPTSTR Name, name of printer object
Level, // DWORD Level, information level
(LPBYTE)pPrinterEnum, // LPBYTE pPrinterEnum, printer information buffer
cbBuf, // DWORD cbBuf, size of printer information buffer
&cbBuf, // LPDWORD pcbNeeded, bytes received or required
&pcReturned) // LPDWORD pcReturned number of printers enumerated
)
{
TRACE( "Error %1d/n ", GetLastError());
return FALSE;
}
LPPRINTER_INFO_2 p = pPrinterEnum;
for (int i=0; i<pcReturned;i++)
{
mPrinters.insert(std::make_pair(CString(p->pPrinterName), p));
TRACE( "PrinterName: %s\n ", p->pPrinterName);
p++;
}
if (pcReturned > 0)
{
return TRUE;
}
else
{
return FALSE;
}
} }
BOOL CConfig::OnInitDialog() BOOL CConfig::OnInitDialog()
{ {
CDialogEx::OnInitDialog(); CDialogEx::OnInitDialog();
HasPrinters();
for (int i = 0; i < 4; i++) for (int i = 0; i < 4; i++)
{ {
mCombo.AddString(item_list[i]); mCombo.AddString(item_list[i]);
} }
for (std::map<CString, LPPRINTER_INFO_2>::iterator it = mPrinters.begin(); it != mPrinters.end(); it++)
{
mPrinterName.AddString(it->first);
}
return TRUE; return TRUE;
} }
BEGIN_MESSAGE_MAP(CConfig, CDialogEx) BEGIN_MESSAGE_MAP(CConfig, CDialogEx)
ON_BN_CLICKED(IDC_BUTTON1, &CConfig::OnBnClickedButton1) ON_BN_CLICKED(IDC_BUTTON1, &CConfig::OnBnClickedButton1)
ON_CBN_SELCHANGE(IDC_COMBO2, &CConfig::OnCbnSelchangeCombo2)
END_MESSAGE_MAP() END_MESSAGE_MAP()
// CConfig 消息处理程序 // CConfig 消息处理程序
...@@ -61,5 +120,14 @@ void CConfig::OnBnClickedButton1() ...@@ -61,5 +120,14 @@ void CConfig::OnBnClickedButton1()
} }
CRegegitKey::insert_device_type(type, get_windows_version()); CRegegitKey::insert_device_type(type, get_windows_version());
index = mPrinterName.GetCurSel();
mPrinterName.GetLBText(index, strCBText);
CRegegitKey::insert_printer_name(strCBText, get_windows_version());
CDialogEx::OnOK(); CDialogEx::OnOK();
} }
void CConfig::OnCbnSelchangeCombo2()
{
// TODO: 在此添加控件通知处理程序代码
}
#pragma once #pragma once
#include "afxwin.h" #include "afxwin.h"
#include <Winspool.h>
#include <map>
// CConfig 对话框 // CConfig 对话框
class CConfig : public CDialogEx class CConfig : public CDialogEx
...@@ -21,4 +21,9 @@ protected: ...@@ -21,4 +21,9 @@ protected:
public: public:
afx_msg void OnBnClickedButton1(); afx_msg void OnBnClickedButton1();
CComboBox mCombo; CComboBox mCombo;
CComboBox mPrinterName;
afx_msg void OnCbnSelchangeCombo2();
BOOL HasPrinters();
private:
std::map<CString, LPPRINTER_INFO_2> mPrinters;
}; };
B// Microsoft Visual C++ generated resource script. B// Microsoft Visual C++ generated resource script.
......
...@@ -112,11 +112,13 @@ void CHealthHutUiDlg::upload_finish() ...@@ -112,11 +112,13 @@ void CHealthHutUiDlg::upload_finish()
{ {
for (std::size_t i = 0; i < mMain.getPath().size(); i++) for (std::size_t i = 0; i < mMain.getPath().size(); i++)
{ {
print_file(mMain.getPath().at(i));
DeleteFile(mMain.getPath().at(i).GetString()); DeleteFile(mMain.getPath().at(i).GetString());
} }
mProcess->Close(); mProcess->Close();
MessageBox(_T("数据上传成功"),_T("提示"),MB_OK); MessageBox(_T("数据上传成功"),_T("提示"),MB_OK);
exit(0); exit(0);
} }
...@@ -218,8 +220,6 @@ BOOL CHealthHutUiDlg::OnInitDialog() ...@@ -218,8 +220,6 @@ BOOL CHealthHutUiDlg::OnInitDialog()
CConfig config; CConfig config;
config.DoModal(); config.DoModal();
MessageBox(_T("配置完成"),_T("欢迎使用"),MB_OK); MessageBox(_T("配置完成"),_T("欢迎使用"),MB_OK);
CDialogEx::OnOK();
return TRUE;
} }
if (0 != Login()) { if (0 != Login()) {
...@@ -375,6 +375,12 @@ void CHealthHutUiDlg::OnNMClickList1(NMHDR *pNMHDR, LRESULT *pResult) ...@@ -375,6 +375,12 @@ void CHealthHutUiDlg::OnNMClickList1(NMHDR *pNMHDR, LRESULT *pResult)
MessageBox(_T("当前没有报告需要上传!"),_T("提示"),MB_OK); MessageBox(_T("当前没有报告需要上传!"),_T("提示"),MB_OK);
CDialogEx::OnOK(); CDialogEx::OnOK();
} }
if (IDCANCEL == MessageBox(_T("请确认上传的当前报告!"), _T("提示"), MB_OKCANCEL))
{
return;
}
util_upload_all(files, name, idCard); util_upload_all(files, name, idCard);
OnWmProcess(0, 0); OnWmProcess(0, 0);
} }
...@@ -383,7 +389,6 @@ void CHealthHutUiDlg::OnNMClickList1(NMHDR *pNMHDR, LRESULT *pResult) ...@@ -383,7 +389,6 @@ void CHealthHutUiDlg::OnNMClickList1(NMHDR *pNMHDR, LRESULT *pResult)
*pResult = 0; *pResult = 0;
} }
void CAboutDlg::OnBnClickedOk() void CAboutDlg::OnBnClickedOk()
{ {
CDialogEx::OnOK(); CDialogEx::OnOK();
......
...@@ -7,7 +7,6 @@ CMainApp::CMainApp(void) ...@@ -7,7 +7,6 @@ CMainApp::CMainApp(void)
{ {
} }
CMainApp::~CMainApp(void) CMainApp::~CMainApp(void)
{ {
} }
......
...@@ -2,7 +2,8 @@ ...@@ -2,7 +2,8 @@
#include "utils.h" #include "utils.h"
#include "RegegitKey.h" #include "RegegitKey.h"
#include <windows.h> #include <windows.h>
#include <stdlib.h>
#include <stdio.h>
CRegegitKey::CRegegitKey(void) CRegegitKey::CRegegitKey(void)
{ {
} }
...@@ -20,7 +21,7 @@ void CRegegitKey::insert_exe(HKEY hKEY, windows_version version) ...@@ -20,7 +21,7 @@ void CRegegitKey::insert_exe(HKEY hKEY, windows_version version)
if (version > windows_7) if (version > windows_7)
exe_path = _T("extapp"); exe_path = _T("extapp");
else else
exe_path = _T("exe_app_name"); exe_path = _T("ext_app_name");
long ret = ::RegSetValueEx(hKEY, exe_path, 0, REG_SZ, (const BYTE *) exePath.GetString(), (exePath.GetLength() + 1) * sizeof(TCHAR)); long ret = ::RegSetValueEx(hKEY, exe_path, 0, REG_SZ, (const BYTE *) exePath.GetString(), (exePath.GetLength() + 1) * sizeof(TCHAR));
} }
...@@ -166,6 +167,21 @@ bool CRegegitKey::insert_device_type(int type, windows_version version) ...@@ -166,6 +167,21 @@ bool CRegegitKey::insert_device_type(int type, windows_version version)
return true; return true;
} }
bool CRegegitKey::insert_printer_name(CString name, windows_version version)
{
HKEY hKey;
DWORD dw;
long ret = ERROR_SUCCESS;
ret =(RegOpenKeyEx(HKEY_CURRENT_USER, APP_KEY_ROOT, 0, KEY64 | KEY_READ |KEY_WRITE, &hKey));
CString strUser(PRINTER_NAME);
ret = ::RegSetValueEx(hKey, strUser, 0, REG_SZ, (const BYTE *) name.GetString(), (name.GetLength() + 1) * sizeof(TCHAR));
RegCloseKey(hKey);
return true;
}
void CRegegitKey::insert_local_path(windows_version version) void CRegegitKey::insert_local_path(windows_version version)
{ {
HKEY hKey; HKEY hKey;
...@@ -214,6 +230,8 @@ bool CRegegitKey::check_win7() ...@@ -214,6 +230,8 @@ bool CRegegitKey::check_win7()
return false; return false;
} }
system("setup.exe");
windows_version version = get_windows_version(); windows_version version = get_windows_version();
insert_jpg(hKEY, version); insert_jpg(hKEY, version);
insert_exe(hKEY, version); insert_exe(hKEY, version);
......
...@@ -12,6 +12,7 @@ public: ...@@ -12,6 +12,7 @@ public:
static BOOL read_key(LPCWSTR key, LPBYTE value, LPDWORD dataLength); static BOOL read_key(LPCWSTR key, LPBYTE value, LPDWORD dataLength);
static BOOL read_app_key(LPCWSTR key, LPBYTE value, LPDWORD dataLength); static BOOL read_app_key(LPCWSTR key, LPBYTE value, LPDWORD dataLength);
static bool insert_device_type(int type, windows_version version); static bool insert_device_type(int type, windows_version version);
static bool insert_printer_name(CString name, windows_version version);
private: private:
static bool check_win10(); static bool check_win10();
static bool check_win7(); static bool check_win7();
......
B//{{NO_DEPENDENCIES}} B//{{NO_DEPENDENCIES}}
......
...@@ -5,6 +5,8 @@ ...@@ -5,6 +5,8 @@
#include "json/reader.h" #include "json/reader.h"
#include "json/value.h" #include "json/value.h"
#include "SqliteUtil.h" #include "SqliteUtil.h"
#include "RegegitKey.h"
#include <WinSpool.h>
#include <stdio.h> #include <stdio.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <iostream> #include <iostream>
...@@ -19,6 +21,252 @@ CString item_list[4] = ...@@ -19,6 +21,252 @@ CString item_list[4] =
_T("糖尿病风险") _T("糖尿病风险")
}; };
static void OnPrint(CDC* pdc,CPrintInfo * lParam,CString strFileName1);
static BOOL GetPrinterDevice(LPTSTR pszPrinterName, HGLOBAL* phDevNames, HGLOBAL* phDevMode);
BOOL PrintPic(CString strFileName,int iCopies,CString strPrintName)
{
CDC dc;
CPrintDialog printDlg(FALSE);
HGLOBAL hDevMode;
HGLOBAL hDevNames;
//以下为判断纸型,m_strPrintSize为类的成员变量
short paperWidth = 2100;
short paperHeight = 2970;
printDlg.GetDefaults();
DEVMODE FAR *pDevMode=(DEVMODE FAR *)::GlobalLock(printDlg.m_pd.hDevMode);
pDevMode->dmFields = pDevMode->dmFields | DM_PAPERSIZE;
pDevMode->dmPaperSize = DMPAPER_USER; //将打印纸设置为自定义DMDO_90
pDevMode->dmPaperWidth = paperWidth;
pDevMode->dmPaperLength = paperHeight;
::GlobalUnlock(printDlg.m_pd.hDevMode);
CPrintInfo Info;//
if (GetPrinterDevice(strPrintName.GetBuffer(0), &hDevNames, &hDevMode))
{
printDlg.m_pd.hDevMode=hDevMode;
printDlg.m_pd.hDevNames = hDevNames;
}
dc.Attach(printDlg.CreatePrinterDC()/*这里很重要,一定要CreatePrinterDC,要不然还是打印机默认的纸型*/); // Attach a printer DC 让HANDLE连接到dc上
dc.m_bPrinting = TRUE;
CString strTitle; // Get the application title ?
strTitle.LoadString(AFX_IDS_APP_TITLE);
DOCINFO di; // Initialise print document details DOCINFO中有相关的打印信息
::ZeroMemory (&di, sizeof (DOCINFO));
di.cbSize = sizeof (DOCINFO);
di.lpszDocName = strFileName;//设置标题
for (int i=0;i<iCopies;i++)
{
BOOL bPrintingOK = dc.StartDoc(&di); // Begin a new print job 开始打印
// Get the printing extents and store in the m_rectDraw field of a
// CPrintInfo object
Info.m_rectDraw.SetRect(0,0,dc.GetDeviceCaps(HORZRES),dc.GetDeviceCaps(VERTRES));//设置范围
Info.SetMaxPage (1);
OnPrint(&dc, &Info,strFileName); // 往DC上画图片,具体实现在下面给出
//OnEndPrinting(&dc, &Info); // 结束打印
if (bPrintingOK)
dc.EndDoc(); // end a print job
else
dc.AbortDoc(); // abort job.
}
dc.Detach(); // detach the printer DC
return TRUE;
}
void OnPrint(CDC* pdc,CPrintInfo * lParam,CString strFileName1)
{
CDC* pDC = pdc;
CPrintInfo* pInfo = (CPrintInfo *)lParam;
CFont DataFont;
DataFont.CreatePointFont(120,L"宋体",pDC);
CString strFileName=strFileName1;
HBITMAP hBitmap;//创建bmp的句柄
CImage image;
image.Load(strFileName1);
hBitmap = image.Detach();
BITMAP bitmap;
::GetObject(hBitmap,sizeof(BITMAP),&bitmap);
double dScale=(double)pInfo->m_rectDraw.Width()/bitmap.bmWidth;
//int nScaledWidth=m_cxWidth;
int nScaledHeight=(int)(bitmap.bmHeight*dScale);
HDC dcMem;
dcMem=::CreateCompatibleDC(pDC->m_hDC);
HBITMAP hOldBmp=(HBITMAP)::SelectObject(dcMem,hBitmap);
CRect r = pInfo->m_rectDraw;
//SizeToPlace(STP_FIX, r, CRect(0,0,bitmap.bmWidth, bitmap.bmHeight));//这个函数没有给出,可以自己写一下,注释掉也行,功能就是调整尺寸的
int nVertCenterPos = pDC->GetDeviceCaps (VERTRES) / 2;
::StretchBlt(pDC->m_hDC, r.left, r.top, r.Width(), r.Height(),
dcMem,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);
::SelectObject(dcMem,hOldBmp);
::DeleteDC(dcMem);
::DeleteObject(hBitmap);
}
BOOL GetPrinterDevice(LPTSTR pszPrinterName, HGLOBAL* phDevNames, HGLOBAL* phDevMode)
{
if (phDevMode == NULL || phDevNames == NULL)
return FALSE;
// Open printer
HANDLE hPrinter;
if (OpenPrinter(pszPrinterName, &hPrinter, NULL) == FALSE)
return FALSE;
// obtain PRINTER_INFO_2 structure and close printer
DWORD dwBytesReturned, dwBytesNeeded;
GetPrinter(hPrinter, 2, NULL, 0, &dwBytesNeeded);
PRINTER_INFO_2* p2 = (PRINTER_INFO_2*)GlobalAlloc(GPTR,
dwBytesNeeded);
if (GetPrinter(hPrinter, 2, (LPBYTE)p2, dwBytesNeeded,
&dwBytesReturned) == 0) {
GlobalFree(p2);
ClosePrinter(hPrinter);
return FALSE;
}
ClosePrinter(hPrinter);
// Allocate a global handle for DEVMODE
HGLOBAL hDevMode = GlobalAlloc(GHND, sizeof(*p2->pDevMode) +
p2->pDevMode->dmDriverExtra);
ASSERT(hDevMode);
DEVMODE* pDevMode = (DEVMODE*)GlobalLock(hDevMode);
ASSERT(pDevMode);
// copy DEVMODE data from PRINTER_INFO_2::pDevMode
memcpy(pDevMode, p2->pDevMode, sizeof(*p2->pDevMode) +
p2->pDevMode->dmDriverExtra);
GlobalUnlock(hDevMode);
// Compute size of DEVNAMES structure from PRINTER_INFO_2's data
DWORD drvNameLen = lstrlen(p2->pDriverName)+1; // driver name
DWORD ptrNameLen = lstrlen(p2->pPrinterName)+1; // printer name
DWORD porNameLen = lstrlen(p2->pPortName)+1; // port name
// Allocate a global handle big enough to hold DEVNAMES.
HGLOBAL hDevNames = GlobalAlloc(GHND,
sizeof(DEVNAMES) +
(drvNameLen + ptrNameLen + porNameLen)*sizeof(TCHAR));
ASSERT(hDevNames);
DEVNAMES* pDevNames = (DEVNAMES*)GlobalLock(hDevNames);
ASSERT(pDevNames);
// Copy the DEVNAMES information from PRINTER_INFO_2
// tcOffset = TCHAR Offset into structure
int tcOffset = sizeof(DEVNAMES)/sizeof(TCHAR);
ASSERT(sizeof(DEVNAMES) == tcOffset*sizeof(TCHAR));
pDevNames->wDriverOffset = tcOffset;
memcpy((LPTSTR)pDevNames + tcOffset, p2->pDriverName,
drvNameLen*sizeof(TCHAR));
tcOffset += drvNameLen;
pDevNames->wDeviceOffset = tcOffset;
memcpy((LPTSTR)pDevNames + tcOffset, p2->pPrinterName,
ptrNameLen*sizeof(TCHAR));
tcOffset += ptrNameLen;
pDevNames->wOutputOffset = tcOffset;
memcpy((LPTSTR)pDevNames + tcOffset, p2->pPortName,
porNameLen*sizeof(TCHAR));
pDevNames->wDefault = 0;
GlobalUnlock(hDevNames);
GlobalFree(p2); // free PRINTER_INFO_2
// set the new hDevMode and hDevNames
*phDevMode = hDevMode;
*phDevNames = hDevNames;
return TRUE;
}
void print_file(CString& name)
{
CString strDefualtDev = TEXT("");
PRINTDLG pd;
LPDEVMODE lpDevMode = NULL;
if(AfxGetApp()->GetPrinterDeviceDefaults(&pd))
{
lpDevMode=(LPDEVMODE)GlobalLock(pd.hDevMode);
if(lpDevMode)
{
strDefualtDev = lpDevMode->dmDeviceName;
}
GlobalUnlock(pd.hDevMode);
}
LPBYTE value = new BYTE[512];
DWORD dataLength = 256;
if (!CRegegitKey::read_app_key(PRINTER_NAME, value, &dataLength)) {
MessageBox(NULL, _T("读取注册表失败"),_T("错误提示"),MB_OK);
return;
}
CString printer;
LpbyteToCString(value, printer, dataLength);
PrintPic(name, 1, printer);
::SetDefaultPrinter(strDefualtDev);
#if 0
::SetDefaultPrinter(printer);
if (AfxGetApp()->GetPrinterDeviceDefaults(&pd))
{
lpDevMode=(LPDEVMODE)GlobalLock(pd.hDevMode);
if(lpDevMode)
{
lpDevMode->dmPaperSize=DMPAPER_A4; // 设定打印纸张幅面
lpDevMode->dmOrientation=DMORIENT_LANDSCAPE; // 设定横向打印
lpDevMode->dmPrintQuality=600; // 设定打印机分辨率
}
GlobalUnlock(pd.hDevMode);
}
CImage image;
DOCINFO di;
memset( &di, 0, sizeof(DOCINFO) );
di.cbSize = sizeof(DOCINFO);
di.lpszDocName = name.GetString(); // 设定打印文档名称
di.lpszOutput = (LPTSTR) NULL;
di.fwType = 0;
int nError;
HDC hdc = ::CreateDC(NULL, printer.GetString(), NULL, lpDevMode); // 得到打印机设备句柄
if(hdc != NULL)
{
image.Load(name);
image.Draw(hdc, 0, 0);
if((nError = StartDoc(hdc, &di)) > 0)
{
if(StartPage(hdc)>0)
{
int xPage = ::GetDeviceCaps(hdc, HORZRES); // 得到可打印纸张的高度
int yPage = ::GetDeviceCaps(hdc, VERTRES); // 得到可打印纸张的宽度
// 在一下地方进行打印输出
if(EndPage(hdc)>0) // 只有结束页成功了才可以关闭文档
EndDoc(hdc); // 关闭打印文档
}
}
}
#endif
}
void set_hwnd(HWND handle) void set_hwnd(HWND handle)
{ {
mHandle = handle; mHandle = handle;
...@@ -372,10 +620,20 @@ bool util_upload(CString& name, CString id, CString& path) ...@@ -372,10 +620,20 @@ bool util_upload(CString& name, CString id, CString& path)
CURLFORM_COPYCONTENTS, id_str.c_str(), CURLFORM_COPYCONTENTS, id_str.c_str(),
CURLFORM_END); CURLFORM_END);
LPBYTE value = new BYTE[512];
DWORD dataLength = 256;
if (!CRegegitKey::read_app_key(DEVICE_TYPE, value, &dataLength)) {
MessageBox(NULL, _T("读取注册表失败"),_T("错误提示"),MB_OK);
return false;
}
CString tt;
LpbyteToCString(value, tt, dataLength);
curl_formadd(&post, curl_formadd(&post,
&last, &last,
CURLFORM_COPYNAME, "type", CURLFORM_COPYNAME, "type",
CURLFORM_COPYCONTENTS, "1", CURLFORM_COPYCONTENTS, tt.GetString(),
CURLFORM_END); CURLFORM_END);
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, FALSE); curl_easy_setopt(curl, CURLOPT_NOPROGRESS, FALSE);
...@@ -390,5 +648,6 @@ bool util_upload(CString& name, CString id, CString& path) ...@@ -390,5 +648,6 @@ bool util_upload(CString& name, CString id, CString& path)
check_result(code); check_result(code);
::PostMessage(mHandle, ON_WM_FILE_FINISH, 0, 0); ::PostMessage(mHandle, ON_WM_FILE_FINISH, 0, 0);
return true; return true;
} }
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#define APP_KEY_ROOT TEXT("Software\\HealthHut") #define APP_KEY_ROOT TEXT("Software\\HealthHut")
#define APP_PATH _T("exepath") #define APP_PATH _T("exepath")
#define DEVICE_TYPE _T("devicetype") #define DEVICE_TYPE _T("devicetype")
#define PRINTER_NAME _T("printername")
#ifdef DDD #ifdef DDD
#define KEY_ROOT HKEY_LOCAL_MACHINE #define KEY_ROOT HKEY_LOCAL_MACHINE
...@@ -54,6 +55,7 @@ extern bool util_upload(CString& name, CString id, CString& path); ...@@ -54,6 +55,7 @@ extern bool util_upload(CString& name, CString id, CString& path);
extern bool util_upload_all(CFileList::file_array& file_list, CString& name, CString& id); extern bool util_upload_all(CFileList::file_array& file_list, CString& name, CString& id);
extern void set_hwnd(HWND handle); extern void set_hwnd(HWND handle);
extern windows_version get_windows_version(); extern windows_version get_windows_version();
extern void print_file(CString& name);
/*************** end *********/ /*************** end *********/
......
BDefaultBuild-zh?part1?0 BDefaultBuild-zh?part1?0
B[<ArchiveFlags>] B[<ArchiveFlags>]
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<DOCUMENT Type="Advanced Installer" CreateVersion="11.0" version="11.0" Modules="professional" RootPath="." Language="zh" Id="{6DDB95D0-77F5-44EC-B45A-409C5979146A}">
<COMPONENT cid="caphyon.advinst.msicomp.MsiPropsComponent">
<ROW Property="AI_BITMAP_DISPLAY_MODE" Value="0"/>
<ROW Property="AI_FINDEXE_TITLE" Value="选择 [|ProductName] 安装包" ValueLocId="AI.Property.FindExeTitle"/>
<ROW Property="ALLUSERS" Value="1"/>
<ROW Property="ARPCOMMENTS" Value="此 Installer 数据库包含了安装 [|ProductName] 所需的逻辑和数据。" ValueLocId="*"/>
<ROW Property="CTRLS" Value="2"/>
<ROW Property="Manufacturer" Value="magicare"/>
<ROW Property="ProductCode" Value="2052:{B870E34C-C74F-49A4-B9BE-5D843CA61041} " Type="16"/>
<ROW Property="ProductLanguage" Value="2052"/>
<ROW Property="ProductName" Value="HealthHut"/>
<ROW Property="ProductVersion" Value="1.0.0" Type="32"/>
<ROW Property="SecureCustomProperties" Value="OLDPRODUCTS;AI_NEWERPRODUCTFOUND;AI_SETUPEXEPATH;SETUPEXEDIR"/>
<ROW Property="UpgradeCode" Value="{404FE83C-6CA1-48FA-8DBA-DD7FA105EDF1}"/>
<ROW Property="WindowsType9X" MultiBuildValue="DefaultBuild:Windows 9x/ME" ValueLocId="-"/>
<ROW Property="WindowsType9XDisplay" MultiBuildValue="DefaultBuild:Windows 9x/ME" ValueLocId="-"/>
<ROW Property="WindowsTypeNT40" MultiBuildValue="DefaultBuild:Windows NT 4.0" ValueLocId="-"/>
<ROW Property="WindowsTypeNT40Display" MultiBuildValue="DefaultBuild:Windows NT 4.0" ValueLocId="-"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiDirsComponent">
<ROW Directory="APPDIR" Directory_Parent="TARGETDIR" DefaultDir="APPDIR:." IsPseudoRoot="1"/>
<ROW Directory="DesktopFolder" Directory_Parent="TARGETDIR" DefaultDir="DESKTO~1|DesktopFolder" IsPseudoRoot="1"/>
<ROW Directory="SHORTCUTDIR" Directory_Parent="TARGETDIR" DefaultDir="SHORTC~1|SHORTCUTDIR" IsPseudoRoot="1"/>
<ROW Directory="TARGETDIR" DefaultDir="SourceDir"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiCompsComponent">
<ROW Component="AI_ExePath" ComponentId="{BCF6C71D-006E-48B6-A64B-640ECE5C0959}" Directory_="APPDIR" Attributes="4" KeyPath="AI_ExePath"/>
<ROW Component="HealthHutUi.exe" ComponentId="{97D1DBE1-B6A3-4350-8868-4178812B6C08}" Directory_="APPDIR" Attributes="0" KeyPath="HealthHutUi.exe"/>
<ROW Component="ProductInformation" ComponentId="{72BF5706-9A84-4271-8791-6CBAF09E711E}" Directory_="APPDIR" Attributes="4" KeyPath="Version"/>
<ROW Component="SHORTCUTDIR" ComponentId="{110DBF98-D27C-4D2C-AFD4-4C32169E8932}" Directory_="SHORTCUTDIR" Attributes="0"/>
<ROW Component="mfc110ud.dll" ComponentId="{259BD530-59AE-4F10-BEFC-263E6C295ABF}" Directory_="APPDIR" Attributes="0" KeyPath="mfc110ud.dll"/>
<ROW Component="msvcp110d.dll" ComponentId="{B8CEB0AD-C98A-449E-971C-DDAD76ED7B3B}" Directory_="APPDIR" Attributes="0" KeyPath="msvcp110d.dll"/>
<ROW Component="msvcr110d.dll" ComponentId="{AB651DDB-D061-487B-88A6-1166E3B3CE0C}" Directory_="APPDIR" Attributes="0" KeyPath="msvcr110d.dll"/>
<ROW Component="setup.exe" ComponentId="{CF082233-1F9A-41AE-BA6A-2F0064FA4985}" Directory_="APPDIR" Attributes="0" KeyPath="setup.exe"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiFeatsComponent">
<ROW Feature="MainFeature" Title="MainFeature" Description="Description" Display="1" Level="1" Directory_="APPDIR" Attributes="0" Components="AI_ExePath HealthHutUi.exe ProductInformation SHORTCUTDIR mfc110ud.dll msvcp110d.dll msvcr110d.dll setup.exe"/>
<ATTRIBUTE name="CurrentFeature" value="MainFeature"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiFilesComponent">
<ROW File="HealthHutUi.exe" Component_="HealthHutUi.exe" FileName="HEALTH~1.EXE|HealthHutUi.exe" Attributes="0" SourcePath="..\workstation\HealthHutUi.exe" SelfReg="false" NextFile="mfc110ud.dll" DigSign="true"/>
<ROW File="mfc110ud.dll" Component_="mfc110ud.dll" FileName="mfc110ud.dll" Attributes="0" SourcePath="..\workstation\mfc110ud.dll" SelfReg="false" NextFile="msvcp110d.dll"/>
<ROW File="msvcp110d.dll" Component_="msvcp110d.dll" FileName="MSVCP1~1.DLL|msvcp110d.dll" Attributes="0" SourcePath="..\workstation\msvcp110d.dll" SelfReg="false" NextFile="msvcr110d.dll"/>
<ROW File="msvcr110d.dll" Component_="msvcr110d.dll" FileName="MSVCR1~1.DLL|msvcr110d.dll" Attributes="0" SourcePath="..\workstation\msvcr110d.dll" SelfReg="false" NextFile="setup.exe"/>
<ROW File="setup.exe" Component_="setup.exe" FileName="setup.exe" Attributes="0" SourcePath="..\workstation\setup.exe" SelfReg="false" DigSign="true"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.BuildComponent">
<ROW BuildKey="DefaultBuild" BuildName="DefaultBuild" BuildOrder="1" BuildType="0" PackageFolder=".." PackageFileName="HealthHut" Languages="zh" InstallationType="4" CabsLocation="1" PackageType="1" FilesInsideExe="true" ExtractionFolder="[AppDataFolder][|Manufacturer]\[|ProductName] [|ProductVersion]\install" ExtUI="true" UseLargeSchema="true"/>
<ATTRIBUTE name="CurrentBuild" value="DefaultBuild"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.DictionaryComponent">
<ROW Path="&lt;AI_DICTS&gt;ui.ail"/>
<ROW Path="&lt;AI_DICTS&gt;ui_zh.ail"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.FragmentComponent">
<ROW Fragment="CommonUI.aip" Path="&lt;AI_FRAGS&gt;CommonUI.aip"/>
<ROW Fragment="MaintenanceTypeDlg.aip" Path="&lt;AI_THEMES&gt;modern\fragments\MaintenanceTypeDlg.aip"/>
<ROW Fragment="MaintenanceWelcomeDlg.aip" Path="&lt;AI_THEMES&gt;modern\fragments\MaintenanceWelcomeDlg.aip"/>
<ROW Fragment="SequenceDialogs.aip" Path="&lt;AI_THEMES&gt;modern\fragments\SequenceDialogs.aip"/>
<ROW Fragment="Sequences.aip" Path="&lt;AI_FRAGS&gt;Sequences.aip"/>
<ROW Fragment="SetupTypeDlg.aip" Path="&lt;AI_THEMES&gt;modern\fragments\SetupTypeDlg.aip"/>
<ROW Fragment="StaticUIStrings.aip" Path="&lt;AI_FRAGS&gt;StaticUIStrings.aip"/>
<ROW Fragment="UI.aip" Path="&lt;AI_THEMES&gt;modern\fragments\UI.aip"/>
<ROW Fragment="Validation.aip" Path="&lt;AI_FRAGS&gt;Validation.aip"/>
<ROW Fragment="VerifyRemoveDlg.aip" Path="&lt;AI_THEMES&gt;modern\fragments\VerifyRemoveDlg.aip"/>
<ROW Fragment="VerifyRepairDlg.aip" Path="&lt;AI_THEMES&gt;modern\fragments\VerifyRepairDlg.aip"/>
<ROW Fragment="WelcomeDlg.aip" Path="&lt;AI_THEMES&gt;modern\fragments\WelcomeDlg.aip"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiActionTextComponent">
<ROW Action="AI_DeleteLzma" Description="正在删除从档案中提取的文件" DescriptionLocId="ActionText.Description.AI_DeleteLzma" TemplateLocId="-"/>
<ROW Action="AI_DeleteRLzma" Description="正在删除从档案中提取的文件" DescriptionLocId="ActionText.Description.AI_DeleteLzma" TemplateLocId="-"/>
<ROW Action="AI_ExtractFiles" Description="正在从档案中提取文件" DescriptionLocId="ActionText.Description.AI_ExtractLzma" TemplateLocId="-"/>
<ROW Action="AI_ExtractLzma" Description="正在从档案中提取文件" DescriptionLocId="ActionText.Description.AI_ExtractLzma" TemplateLocId="-"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiAppSearchComponent">
<ROW Property="AI_SETUPEXEPATH" Signature_="AI_EXE_PATH_CU" Builds="DefaultBuild"/>
<ROW Property="AI_SETUPEXEPATH" Signature_="AI_EXE_PATH_LM" Builds="DefaultBuild"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiBinaryComponent">
<ROW Name="Prereq.dll" SourcePath="&lt;AI_CUSTACTS&gt;Prereq.dll"/>
<ROW Name="aicustact.dll" SourcePath="&lt;AI_CUSTACTS&gt;aicustact.dll"/>
<ROW Name="lzmaextractor.dll" SourcePath="&lt;AI_CUSTACTS&gt;lzmaextractor.dll"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiControlEventComponent">
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="NewDialog" Argument="SetupTypeDlg" Condition="AI_INSTALL" Ordering="1"/>
<ROW Dialog_="VerifyReadyDlg" Control_="Install" Event="EndDialog" Argument="Return" Condition="AI_INSTALL" Ordering="197"/>
<ROW Dialog_="VerifyReadyDlg" Control_="Back" Event="NewDialog" Argument="SetupTypeDlg" Condition="AI_INSTALL" Ordering="201"/>
<ROW Dialog_="SetupTypeDlg" Control_="TypicalInstallButton" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_INSTALL" Ordering="401"/>
<ROW Dialog_="SetupTypeDlg" Control_="Back" Event="NewDialog" Argument="WelcomeDlg" Condition="AI_INSTALL" Ordering="1"/>
<ROW Dialog_="SetupTypeDlg" Control_="CompleteInstallButton" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_INSTALL AND InstallMode=InstallModeComplete" Ordering="401"/>
<ROW Dialog_="VerifyReadyDlg" Control_="Back" Event="NewDialog" Argument="SetupTypeDlg" Condition="AI_INSTALL AND InstallMode=InstallModeComplete" Ordering="203"/>
<ROW Dialog_="CustomizeDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_INSTALL AND InstallMode=InstallModeCustom" Ordering="101"/>
<ROW Dialog_="VerifyReadyDlg" Control_="Back" Event="NewDialog" Argument="CustomizeDlg" Condition="AI_INSTALL AND InstallMode=InstallModeCustom" Ordering="202"/>
<ROW Dialog_="SetupTypeDlg" Control_="CustomInstallButton" Event="NewDialog" Argument="CustomizeDlg" Condition="AI_INSTALL AND InstallMode=InstallModeCustom" Ordering="101"/>
<ROW Dialog_="CustomizeDlg" Control_="Back" Event="NewDialog" Argument="SetupTypeDlg" Condition="AI_INSTALL AND InstallMode=InstallModeCustom" Ordering="1"/>
<ROW Dialog_="MaintenanceWelcomeDlg" Control_="Next" Event="NewDialog" Argument="MaintenanceTypeDlg" Condition="AI_MAINT" Ordering="99"/>
<ROW Dialog_="CustomizeDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_MAINT" Ordering="102"/>
<ROW Dialog_="CustomizeDlg" Control_="Back" Event="NewDialog" Argument="MaintenanceTypeDlg" Condition="AI_MAINT" Ordering="2"/>
<ROW Dialog_="VerifyReadyDlg" Control_="Install" Event="EndDialog" Argument="Return" Condition="AI_MAINT" Ordering="198"/>
<ROW Dialog_="VerifyReadyDlg" Control_="Back" Event="NewDialog" Argument="CustomizeDlg" Condition="AI_MAINT" Ordering="204"/>
<ROW Dialog_="MaintenanceTypeDlg" Control_="AddRemoveButton" Event="NewDialog" Argument="CustomizeDlg" Condition="AI_MAINT" Ordering="501"/>
<ROW Dialog_="MaintenanceTypeDlg" Control_="Back" Event="NewDialog" Argument="MaintenanceWelcomeDlg" Condition="AI_MAINT" Ordering="1"/>
<ROW Dialog_="MaintenanceTypeDlg" Control_="RemoveButton" Event="NewDialog" Argument="VerifyRemoveDlg" Condition="AI_MAINT AND InstallMode=&quot;Remove&quot;" Ordering="601"/>
<ROW Dialog_="VerifyRemoveDlg" Control_="Back" Event="NewDialog" Argument="MaintenanceTypeDlg" Condition="AI_MAINT AND InstallMode=&quot;Remove&quot;" Ordering="1"/>
<ROW Dialog_="MaintenanceTypeDlg" Control_="RepairButton" Event="NewDialog" Argument="VerifyRepairDlg" Condition="AI_MAINT AND InstallMode=&quot;Repair&quot;" Ordering="601"/>
<ROW Dialog_="VerifyRepairDlg" Control_="Back" Event="NewDialog" Argument="MaintenanceTypeDlg" Condition="AI_MAINT AND InstallMode=&quot;Repair&quot;" Ordering="1"/>
<ROW Dialog_="VerifyRepairDlg" Control_="Repair" Event="EndDialog" Argument="Return" Condition="AI_MAINT AND InstallMode=&quot;Repair&quot;" Ordering="399" Options="1"/>
<ROW Dialog_="VerifyRemoveDlg" Control_="Remove" Event="EndDialog" Argument="Return" Condition="AI_MAINT AND InstallMode=&quot;Remove&quot;" Ordering="299" Options="1"/>
<ROW Dialog_="PatchWelcomeDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_PATCH" Ordering="201"/>
<ROW Dialog_="VerifyReadyDlg" Control_="Install" Event="EndDialog" Argument="Return" Condition="AI_PATCH" Ordering="199"/>
<ROW Dialog_="VerifyReadyDlg" Control_="Back" Event="NewDialog" Argument="PatchWelcomeDlg" Condition="AI_PATCH" Ordering="205"/>
<ROW Dialog_="ResumeDlg" Control_="Install" Event="EndDialog" Argument="Return" Condition="AI_RESUME" Ordering="299"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiCreateFolderComponent">
<ROW Directory_="SHORTCUTDIR" Component_="SHORTCUTDIR"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiCustActComponent">
<ROW Action="AI_BACKUP_AI_SETUPEXEPATH" Type="51" Source="AI_SETUPEXEPATH_ORIGINAL" Target="[AI_SETUPEXEPATH]"/>
<ROW Action="AI_ChooseTextStyles" Type="1" Source="aicustact.dll" Target="ChooseTextStyles"/>
<ROW Action="AI_DATA_SETTER" Type="51" Source="AI_ExtractFiles" Target="[AI_SETUPEXEPATH]"/>
<ROW Action="AI_DOWNGRADE" Type="19" Target="4010"/>
<ROW Action="AI_DeleteCadLzma" Type="51" Source="AI_DeleteLzma" Target="[AI_SETUPEXEPATH]"/>
<ROW Action="AI_DeleteLzma" Type="1025" Source="lzmaextractor.dll" Target="DeleteLZMAFiles"/>
<ROW Action="AI_DeleteRCadLzma" Type="51" Source="AI_DeleteRLzma" Target="[AI_SETUPEXEPATH]"/>
<ROW Action="AI_DeleteRLzma" Type="1281" Source="lzmaextractor.dll" Target="DeleteLZMAFiles"/>
<ROW Action="AI_DpiContentScale" Type="1" Source="aicustact.dll" Target="DpiContentScale"/>
<ROW Action="AI_EstimateExtractFiles" Type="1" Source="Prereq.dll" Target="EstimateExtractFiles"/>
<ROW Action="AI_ExtractCadLzma" Type="51" Source="AI_ExtractLzma" Target="[AI_SETUPEXEPATH]"/>
<ROW Action="AI_ExtractFiles" Type="1025" Source="Prereq.dll" Target="ExtractSourceFiles" AdditionalSeq="AI_DATA_SETTER"/>
<ROW Action="AI_ExtractLzma" Type="1025" Source="lzmaextractor.dll" Target="ExtractLZMAFiles"/>
<ROW Action="AI_FindExeLzma" Type="1" Source="lzmaextractor.dll" Target="FindEXE"/>
<ROW Action="AI_InstallModeCheck" Type="1" Source="aicustact.dll" Target="UpdateInstallMode" WithoutSeq="true"/>
<ROW Action="AI_LaunchApp" Type="1" Source="aicustact.dll" Target="[#HealthHutUi.exe]"/>
<ROW Action="AI_PREPARE_UPGRADE" Type="65" Source="aicustact.dll" Target="PrepareUpgrade"/>
<ROW Action="AI_RESTORE_AI_SETUPEXEPATH" Type="51" Source="AI_SETUPEXEPATH" Target="[AI_SETUPEXEPATH_ORIGINAL]"/>
<ROW Action="AI_RESTORE_LOCATION" Type="65" Source="aicustact.dll" Target="RestoreLocation"/>
<ROW Action="AI_ResolveKnownFolders" Type="1" Source="aicustact.dll" Target="AI_ResolveKnownFolders"/>
<ROW Action="AI_SHOW_LOG" Type="65" Source="aicustact.dll" Target="LaunchLogFile" WithoutSeq="true"/>
<ROW Action="AI_STORE_LOCATION" Type="51" Source="ARPINSTALLLOCATION" Target="[APPDIR]"/>
<ROW Action="SET_APPDIR" Type="307" Source="APPDIR" Target="[ProgramFilesFolder][Manufacturer]\[ProductName]"/>
<ROW Action="SET_SHORTCUTDIR" Type="307" Source="SHORTCUTDIR" Target="[ProgramMenuFolder][ProductName]"/>
<ROW Action="SET_TARGETDIR_TO_APPDIR" Type="51" Source="TARGETDIR" Target="[APPDIR]"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiInstExSeqComponent">
<ROW Action="AI_DOWNGRADE" Condition="AI_NEWERPRODUCTFOUND AND (UILevel &lt;&gt; 5)" Sequence="210"/>
<ROW Action="AI_RESTORE_LOCATION" Condition="APPDIR=&quot;&quot;" Sequence="749"/>
<ROW Action="AI_STORE_LOCATION" Condition="(Not Installed) OR REINSTALL" Sequence="1501"/>
<ROW Action="AI_PREPARE_UPGRADE" Condition="AI_UPGRADE=&quot;No&quot; AND (Not Installed)" Sequence="1399"/>
<ROW Action="AI_ResolveKnownFolders" Sequence="51"/>
<ROW Action="AI_BACKUP_AI_SETUPEXEPATH" Sequence="99" Builds="DefaultBuild"/>
<ROW Action="AI_RESTORE_AI_SETUPEXEPATH" Condition="AI_SETUPEXEPATH_ORIGINAL" Sequence="101" Builds="DefaultBuild"/>
<ROW Action="AI_DeleteCadLzma" Condition="SETUPEXEDIR=&quot;&quot; AND Installed AND (REMOVE&lt;&gt;&quot;ALL&quot;) AND (AI_INSTALL_MODE&lt;&gt;&quot;Remove&quot;) AND (NOT PATCH)" Sequence="199" Builds="DefaultBuild"/>
<ROW Action="AI_DeleteRCadLzma" Condition="SETUPEXEDIR=&quot;&quot; AND Installed AND (REMOVE&lt;&gt;&quot;ALL&quot;) AND (AI_INSTALL_MODE&lt;&gt;&quot;Remove&quot;) AND (NOT PATCH)" Sequence="198" Builds="DefaultBuild"/>
<ROW Action="AI_ExtractCadLzma" Condition="SETUPEXEDIR=&quot;&quot; AND Installed AND (REMOVE&lt;&gt;&quot;ALL&quot;) AND (AI_INSTALL_MODE&lt;&gt;&quot;Remove&quot;) AND (NOT PATCH)" Sequence="197" Builds="DefaultBuild"/>
<ROW Action="AI_FindExeLzma" Condition="SETUPEXEDIR=&quot;&quot; AND Installed AND (REMOVE&lt;&gt;&quot;ALL&quot;) AND (AI_INSTALL_MODE&lt;&gt;&quot;Remove&quot;) AND (NOT PATCH)" Sequence="196" Builds="DefaultBuild"/>
<ROW Action="AI_ExtractLzma" Condition="SETUPEXEDIR=&quot;&quot; AND Installed AND (REMOVE&lt;&gt;&quot;ALL&quot;) AND (AI_INSTALL_MODE&lt;&gt;&quot;Remove&quot;) AND (NOT PATCH)" Sequence="1549" Builds="DefaultBuild"/>
<ROW Action="AI_DeleteRLzma" Condition="SETUPEXEDIR=&quot;&quot; AND Installed AND (REMOVE&lt;&gt;&quot;ALL&quot;) AND (AI_INSTALL_MODE&lt;&gt;&quot;Remove&quot;) AND (NOT PATCH)" Sequence="1548" Builds="DefaultBuild"/>
<ROW Action="AI_DeleteLzma" Condition="SETUPEXEDIR=&quot;&quot; AND Installed AND (REMOVE&lt;&gt;&quot;ALL&quot;) AND (AI_INSTALL_MODE&lt;&gt;&quot;Remove&quot;) AND (NOT PATCH)" Sequence="6599" Builds="DefaultBuild"/>
<ROW Action="AI_ExtractFiles" Sequence="3998" Builds="DefaultBuild"/>
<ROW Action="AI_DATA_SETTER" Sequence="3997"/>
<ROW Action="AI_EstimateExtractFiles" Sequence="3999" Builds="DefaultBuild"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiInstallUISequenceComponent">
<ROW Action="AI_RESTORE_LOCATION" Condition="APPDIR=&quot;&quot;" Sequence="749"/>
<ROW Action="AI_ResolveKnownFolders" Sequence="52"/>
<ROW Action="AI_DpiContentScale" Sequence="51"/>
<ROW Action="AI_BACKUP_AI_SETUPEXEPATH" Sequence="99"/>
<ROW Action="AI_RESTORE_AI_SETUPEXEPATH" Condition="AI_SETUPEXEPATH_ORIGINAL" Sequence="101"/>
<ROW Action="AI_ChooseTextStyles" Sequence="74"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiLaunchConditionsComponent">
<ROW Condition="(VersionNT &lt;&gt; 400)" Description="[ProductName] cannot be installed on the following Windows versions: [WindowsTypeNT40Display]" DescriptionLocId="AI.LaunchCondition.NoNT40" IsPredefined="true" Builds="DefaultBuild"/>
<ROW Condition="VersionNT" Description="[ProductName] cannot be installed on [WindowsType9XDisplay]" DescriptionLocId="AI.LaunchCondition.No9X" IsPredefined="true" Builds="DefaultBuild"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiRegLocatorComponent">
<ROW Signature_="AI_EXE_PATH_CU" Root="1" Key="Software\Caphyon\Advanced Installer\LZMA\[ProductCode]\[ProductVersion]" Name="AI_ExePath" Type="2"/>
<ROW Signature_="AI_EXE_PATH_LM" Root="2" Key="Software\Caphyon\Advanced Installer\LZMA\[ProductCode]\[ProductVersion]" Name="AI_ExePath" Type="2"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiRegsComponent">
<ROW Registry="AI_ExePath" Root="-1" Key="Software\Caphyon\Advanced Installer\LZMA\[ProductCode]\[ProductVersion]" Name="AI_ExePath" Value="[AI_SETUPEXEPATH]" Component_="AI_ExePath"/>
<ROW Registry="Path" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="Path" Value="[APPDIR]" Component_="ProductInformation"/>
<ROW Registry="Version" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="Version" Value="[ProductVersion]" Component_="ProductInformation"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiShortsComponent">
<ROW Shortcut="HealthHutUi.exe" Directory_="SHORTCUTDIR" Name="HEALTH~1.EXE|HealthHutUi.exe" Component_="HealthHutUi.exe" Target="[#HealthHutUi.exe]" Description="HealthHutUi.exe" Hotkey="0" IconIndex="0" ShowCmd="1" WkDir="APPDIR"/>
<ROW Shortcut="HealthHutUi.exe_1" Directory_="DesktopFolder" Name="HEALTH~1.EXE|HealthHutUi.exe" Component_="HealthHutUi.exe" Target="[#HealthHutUi.exe]" Description="HealthHutUi.exe" Hotkey="0" IconIndex="0" ShowCmd="1" WkDir="APPDIR"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiThemeComponent">
<ATTRIBUTE name="UsedTheme" value="modern"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiUpgradeComponent">
<ROW UpgradeCode="[|UpgradeCode]" VersionMax="[|ProductVersion]" Attributes="1025" ActionProperty="OLDPRODUCTS"/>
<ROW UpgradeCode="[|UpgradeCode]" VersionMin="[|ProductVersion]" Attributes="2" ActionProperty="AI_NEWERPRODUCTFOUND"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.SynchronizedFolderComponent">
<ROW Directory_="APPDIR" SourcePath="..\workstation" ExcludePattern="*~|#*#|%*%|._|CVS|.cvsignore|SCCS|vssver.scc|mssccprj.scc|vssver2.scc|.svn|.DS_Store" ExcludeFlags="6"/>
</COMPONENT>
</DOCUMENT>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment