से लिस्टबॉक्स में जोड़ें हाय मैं उपयोगकर्ता मशीन पर COM पोर्ट्स को जांचने की कोशिश कर रहा हूं और फिर उन्हें C++ में कस्टम एक्शन के माध्यम से एक सूची बॉक्स में डालने का प्रयास कर रहा हूं। यह जानकारी दिखाई नहीं दे रहा हालांकि और जब मैं डिबग सभी यह कह रहे हैं यह लिस्टबॉक्स के लिए मेरे Wix कोड है "फ़ंक्शन निष्पादन विफल":विक्स: सी ++ कस्टम एक्शन
<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 ComPort;
ComPort = buffer;
hr = WcaAddTempRecord(&hTable, &hColumns, L"ListBox",&insertError, 0, 4, L"COMPORT", 1, ComPort, ComPort);
ExitOnFailure(hr, "failed to set COMPORT");
इसके अलावा लक्ष्य कंप्यूटर सीरियल पोर्ट हो सकता है क्या उन सब को पाश के लिए अंदर मेरे समारोह के साथ सूचीबद्ध किया है करने के लिए सबसे अच्छा तरीका है?
धन्यवाद
आप अपनी कस्टम कार्रवाई निष्पादित करने का प्रयास कैसे कर रहे हैं? क्या आपने चेक किया है (निर्भरता वाकर का उपयोग करके) कि यह वास्तव में आपके डीएलएल से निर्यात किया जा रहा है? – snowdude
विक्स में कस्टम कार्रवाई को बुलाया जा रहा है क्योंकि मैं इसमें टूटने में सक्षम था ताकि समस्या न हो। धन्यवाद .. :) –
तो, आप त्रुटि कहां निष्पादित करने में विफल रहे हैं? क्या आपने भाग लिया है: 'msiexec/l * vx'? – snowdude