Wix从路径获取值
嘿,我正在创建一个程序的安装程序,该程序依赖于另一个名为“visma”的程序。我想做的只是,当用户选择安装路径时 用户还需要指定另外两个安装visma的路径。 然后我想从输入中读取一个txt文件或其他文件,这样我以后可以在程序外读取路径并从visma复制一些我需要的文件 这是我在用户界面中所取得的进展,安装可以正常工作 但是我不知道如何创建更改图片中三个字段的默认路径所需的目录变量 MYInstalldirdlg *Wix从路径获取值,wix,Wix,嘿,我正在创建一个程序的安装程序,该程序依赖于另一个名为“visma”的程序。我想做的只是,当用户选择安装路径时 用户还需要指定另外两个安装visma的路径。 然后我想从输入中读取一个txt文件或其他文件,这样我以后可以在程序外读取路径并从visma复制一些我需要的文件 这是我在用户界面中所取得的进展,安装可以正常工作 但是我不知道如何创建更改图片中三个字段的默认路径所需的目录变量 MYInstalldirdlg * 1. 正如您所看到的,它们都具有从我的目录WIXUI\u INSTAL
1.
正如您所看到的,它们都具有从我的目录WIXUI\u INSTALLDIR
WixUI\u MYInstallDir
*
1.
"1"]]>
1.
未安装
安装并修补
1.
许可证接受=“1”
1.
1.
不是WIXUI_DONTVALIDATEPATH
"1"]]>
WIXUI\u DONTVALIDATEPATH或WIXUI\u INSTALLDIR\u VALID=“1”
1.
1.
未安装
已安装但未安装修补程序
安装并修补
1.
1.
1.
1.
在这里,我只做了必要的更改以使其正常工作:更改为WixUI_MYInstallDir等,以便名称匹配
产品
*
//要安装的组件和文件
INSTALLDIR
只包括相关部分,但我有一个wix和产品标签的订单,但我想我必须作出一个新的属性Id到我的新文件夹路径我想要的
但是我如何使程序只读取路径并将它们发送到我可以读取的变量或文本文件中呢。我不希望该程序创建新文件夹,就像它与安装路径。用户只需在visma所在的位置选择这些内容,然后读取
谢谢你的回答
*
*
*
*
错误
使用您提到的不同属性:
<Property Id="WIXUI_INSTALLDIR">INSTALLDIR</Property>
<Property Id="VISMA_ADMIN" Secure="yes"></Property>
<Property Id="SPCS_FOLDER">INSTALLDIR</Property>
<Control Id="FolderLabel2" Type="Text" X="20" Y="110" Width="290" Height="12" NoPrefix="yes" Text="Please specify where your Visma Administration installation folder is:" />
<Control Id="Folder2" Type="PathEdit" X="20" Y="125" Hidden ="no" Width="320" Height="18" Property="VISMA_ADMIN" Indirect="yes" />
<Control Id="ChangeFolder2" Type="Text" X="20" Y="150" Width="56" Height="18" Text="Change..." />
<Control Id="FolderLabel3" Type="Text" X="20" Y="175" Width="290" Height="22" NoPrefix="yes" Text="Please specify where your SPCS folder is which contains (Företag) and (Gemensamma filer):" />
<Control Id="Folder3" Type="PathEdit" X="20" Y="195" Hidden ="no" Width="320" Height="18" Property="SPCS_FOLDER" Indirect="yes" />
<Control Id="ChangeFolder3" Type="Text" X="20" Y="215" Width="56" Height="18" Text="Change..." />
我假设您正在安装该产品的文本文件,因此获取它所在的目录:
hr = WcaGetProperty(L"INSTALLDIR",&szInstallDir);
ExitOnFailure(hr, "failed to get install location");
wcstombs(szLocation, szValueBuf, 260);
strcat(szLocation, "\\NameOfTextFile.txt");
CString lpszString = CString("Visma Admin:") + szVismaAdmin + "\r\n";
hr = AppendInfo(szLocation,lpszString);
ExitOnFailure(hr, "failed to append the NameOfTextFile.txt file with the
LExit:
ReleaseStr(szValueBuf);
er = SUCCEEDED(hr) ? ERROR_SUCCESS : ERROR_INSTALL_FAILURE;
return WcaFinalize(er);
}
和助手函数:
HRESULT AppendInfo(__in LPCSTR lpszFile, __in LPCSTR lpszEntry )
{
HRESULT hr = S_OK;
HANDLE hFile;
DWORD dwWritten;
CHAR szError[MAX_PATH*2];
CHAR szTitle[MAX_PATH];
try
{
if ((hFile = CreateFile(lpszFile,
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL)) == INVALID_HANDLE_VALUE)
{
// Error: Couldn't Open File. Handle error
}
// No Entry Exists.
SetFilePointer(hFile, 0, NULL, FILE_END);
if ( !WriteFile(hFile,lpszEntry,lstrlen(lpszEntry),&dwWritten,NULL) )
{
CloseHandle(hFile);
//HandleError
}
CloseHandle(hFile);
}
catch(int e)
{
// A failure caused an exception!
//Handle Error
}
return hr;
}
编辑:忘记提到添加自定义操作并在安装完成后计划它。请使用您提到的不同属性:
<Property Id="WIXUI_INSTALLDIR">INSTALLDIR</Property>
<Property Id="VISMA_ADMIN" Secure="yes"></Property>
<Property Id="SPCS_FOLDER">INSTALLDIR</Property>
<Control Id="FolderLabel2" Type="Text" X="20" Y="110" Width="290" Height="12" NoPrefix="yes" Text="Please specify where your Visma Administration installation folder is:" />
<Control Id="Folder2" Type="PathEdit" X="20" Y="125" Hidden ="no" Width="320" Height="18" Property="VISMA_ADMIN" Indirect="yes" />
<Control Id="ChangeFolder2" Type="Text" X="20" Y="150" Width="56" Height="18" Text="Change..." />
<Control Id="FolderLabel3" Type="Text" X="20" Y="175" Width="290" Height="22" NoPrefix="yes" Text="Please specify where your SPCS folder is which contains (Företag) and (Gemensamma filer):" />
<Control Id="Folder3" Type="PathEdit" X="20" Y="195" Hidden ="no" Width="320" Height="18" Property="SPCS_FOLDER" Indirect="yes" />
<Control Id="ChangeFolder3" Type="Text" X="20" Y="215" Width="56" Height="18" Text="Change..." />
我假设您正在安装该产品的文本文件,因此获取它所在的目录:
hr = WcaGetProperty(L"INSTALLDIR",&szInstallDir);
ExitOnFailure(hr, "failed to get install location");
wcstombs(szLocation, szValueBuf, 260);
strcat(szLocation, "\\NameOfTextFile.txt");
CString lpszString = CString("Visma Admin:") + szVismaAdmin + "\r\n";
hr = AppendInfo(szLocation,lpszString);
ExitOnFailure(hr, "failed to append the NameOfTextFile.txt file with the
LExit:
ReleaseStr(szValueBuf);
er = SUCCEEDED(hr) ? ERROR_SUCCESS : ERROR_INSTALL_FAILURE;
return WcaFinalize(er);
}
和助手函数:
HRESULT AppendInfo(__in LPCSTR lpszFile, __in LPCSTR lpszEntry )
{
HRESULT hr = S_OK;
HANDLE hFile;
DWORD dwWritten;
CHAR szError[MAX_PATH*2];
CHAR szTitle[MAX_PATH];
try
{
if ((hFile = CreateFile(lpszFile,
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL)) == INVALID_HANDLE_VALUE)
{
// Error: Couldn't Open File. Handle error
}
// No Entry Exists.
SetFilePointer(hFile, 0, NULL, FILE_END);
if ( !WriteFile(hFile,lpszEntry,lstrlen(lpszEntry),&dwWritten,NULL) )
{
CloseHandle(hFile);
//HandleError
}
CloseHandle(hFile);
}
catch(int e)
{
// A failure caused an exception!
//Handle Error
}
return hr;
}
编辑:忘了在
InstallFinalize
谢谢:)之后添加自定义操作并计划它。这将有很大帮助:)但是我是否也必须在project中创建目录,或者只是为了显示默认映射?有一个错误,我不太明白,在你的第一个代码中编辑了更改,这个错误意味着对话框上有一个控件需要链接到它的属性。详细的日志是查明问题的一个好方法。这两个网站应该对你有所帮助,谢谢:)这会有很大帮助:)但我是否也必须在project中创建目录,还是这样它才会显示默认映射?有一个错误,我不太明白,在你的第一个代码中编辑了更改,这个错误意味着对话框上有一个控件需要链接到它的属性。详细的日志是查明问题的一个好方法。这两个网站应该对你有所帮助,
HRESULT AppendInfo(__in LPCSTR lpszFile, __in LPCSTR lpszEntry )
{
HRESULT hr = S_OK;
HANDLE hFile;
DWORD dwWritten;
CHAR szError[MAX_PATH*2];
CHAR szTitle[MAX_PATH];
try
{
if ((hFile = CreateFile(lpszFile,
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL)) == INVALID_HANDLE_VALUE)
{
// Error: Couldn't Open File. Handle error
}
// No Entry Exists.
SetFilePointer(hFile, 0, NULL, FILE_END);
if ( !WriteFile(hFile,lpszEntry,lstrlen(lpszEntry),&dwWritten,NULL) )
{
CloseHandle(hFile);
//HandleError
}
CloseHandle(hFile);
}
catch(int e)
{
// A failure caused an exception!
//Handle Error
}
return hr;
}