こんにちは私は、ユーザーマシン上のCOMポートをチェックして、C++のカスタムアクションを介してリストボックスに挿入しようとしています。それは情報が表示されていないと私はデバッグするとき、それは言っているすべてのですがこれは、リストボックスのための私のウィックスコードである「機能は実行できませんでした」:Wix:C++からリストボックスに追加カスタムアクション
<Control Id="ListBoxID" Type="ListBox" Property="COMPORT" Width="80" Height="40" X="80" Y="165" Indirect="no">
<ListBox Property="COMPORT">
</ListBox>
<Condition Action="hide">(DEVICETYPE = "1")</Condition>
<Condition Action="show">(DEVICETYPE = "2")</Condition>
<Condition Action="show">(DEVICETYPE = "3")</Condition>
<Condition Action="hide">(DEVICETYPE = "4")</Condition>
</Control>
そして、これは私のカスタムアクションです:
extern "C" UINT __stdcall GetDatascanPort(MSIHANDLE hInstall)
{
HRESULT hr = S_OK;
UINT er = ERROR_SUCCESS;
HKEY keyHandle;
DWORD i,openStatus,cb_value_buffer,cb_buffer,dwType;
char value_buffer[100],buffer[10];
MSIHANDLE hTable = NULL;
MSIHANDLE hColumns = NULL;
MSIDBERROR insertError = MSIDBERROR_NOERROR;
hr = WcaInitialize(hInstall, "GetDatascanPort");
ExitOnFailure(hr, "Failed to initialize");
WcaLog(LOGMSG_STANDARD, "Initialized.");
if (RegCreateKeyEx(HKEY_LOCAL_MACHINE,
"HARDWARE\\DEVICEMAP\\SERIALCOMM",
0,
"",
REG_OPTION_NON_VOLATILE,
KEY_QUERY_VALUE,
default_sa(),
&keyHandle,
&openStatus) == ERROR_SUCCESS)
{
for (i=0;;i++)
{
cb_value_buffer = sizeof(value_buffer);
cb_buffer = sizeof(buffer);
if (RegEnumValue(keyHandle,
i,
value_buffer,
&cb_value_buffer,
NULL,
&dwType,
(unsigned char *) buffer,
&cb_buffer) != ERROR_SUCCESS)
break;
if (dwType != REG_SZ || strlen(buffer) > 6)
continue;
hr = WcaAddTempRecord(&hTable, &hColumns, L"ListBox",&insertError, 0, 4, L"COMPORT", 1, 0, buffer);
ExitOnFailure(hr, "failed to set COMPORT");
}
RegCloseKey(keyHandle);
if (hTable)
MsiCloseHandle(hTable);
if (hColumns)
MsiCloseHandle(hColumns);
return WcaFinalize(hr);
}
LExit:
er = SUCCEEDED(hr) ? ERROR_SUCCESS : ERROR_INSTALL_FAILURE;
return WcaFinalize(er);
}
誰も助けてくれますか?ありがとう
編集:私はそれが私のリストボックスを更新していますが、それは読みにくい、奇妙な記号ではありません。私はそのようにCStringに私のcharを変更しました。これは間違って表示することとは別に動作するようです。
CString ComPort;
ComPort = buffer;
hr = WcaAddTempRecord(&hTable, &hColumns, L"ListBox",&insertError, 0, 4, L"COMPORT", 1, ComPort, ComPort);
ExitOnFailure(hr, "failed to set COMPORT");
はまた、ターゲットコンピュータは、それらすべてが、ループの内側に私の機能が列挙されているための最善の方法は何であるのシリアルポートを有することができますか?
おかげで
カスタムアクションをどのように実行しようとしていますか? Dependency Walkerを使ってDLLから実際にエクスポートされていることを確認しましたか? – snowdude
カスタムアクションはWixで呼び出されているので、問題にならないようにブレークポイントを設定することができました。ありがとう.. :) –
だから、関数はどこでエラーを実行できませんでしたか?あなたは 'msiexec/l * vx'を実行しましたか? – snowdude