Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Why node exits without any error messages? #5

Open
anisimov opened this issue Mar 24, 2013 · 3 comments
Open

Why node exits without any error messages? #5

anisimov opened this issue Mar 24, 2013 · 3 comments
Labels

Comments

@anisimov
Copy link

Hello!

I trying to use your great nodejs module in system monitoring daemon and see very strange behavior. Please see working code sample. When I run it without changes node will exits at 1050-1100 step without any error messages. But this sample have infinite loop.

Changes of timeouts in line 10 are not helps. If I uncomment line 25 with console.log of result object - all begins works ok. If I not touch line 25 and comment line 31 - all works ok too.

What is the reason for this strange behavior?

var win32ole = require( 'win32ole' );
var x=0;

var locator = win32ole.client.Dispatch('WbemScripting.SWbemLocator');
var svr = locator.ConnectServer('.', 'root/cimv2'); // . = self PC

function test() {
    wmi_query( [ 'DeviceID', 'FreeSpace', 'Size' ], 'Win32_LogicalDisk', 'Size != Null' );
  x++; console.log( x );
    setTimeout( test, 1 ); // tested values 1, 10, 50, 100 - all buggy
}
test();

function wmi_query( fields, from, where ) {
  var q = 'SELECT ' + fields.join( ',' ) + ' FROM ' + from; if( where !== undefined ) q += ' WHERE ' + where;
  q = svr.ExecQuery( q );
  var count = q.Count;
  var result = [];
  for( var iq = 0; iq < count; iq++ ){
    var item = q.ItemIndex( iq ), obj = {};
    for( var i = 0; i < fields.length; i++ ) { 
       obj[ fields[ i ] ] = wmi_prop( item, fields[ i ] ); 
    }
    result.push( obj );
    //console.log(obj); // 1050-1100 times w/o this
  }
  return( result );
}

function wmi_prop( obj, propertyname ){
  var property = obj[propertyname]; // if remove this, works normally
  return property == null ? 'NULL' : property;
};
@anisimov
Copy link
Author

Also I have a problem for select some fields from WQL. For example, I unable to get CurrentTimeZone value from Win32_OperatingSystem. Node exits with error:

OLE error: [CurrentTimeZone] -2147352570 [CurrentTimeZone] IDispatch::GetIDsOfNames AutoWrap() failed

Similar situation is with SettingID value from Win32_StartupCommand. Both of these values perfectly gets with using cscript.exe + JSscript.

@anisimov
Copy link
Author

Additional remark. Same code with console.log enabled in line 25 also causes error in 39880 iteration:

OLE error: [Count] -2147352567 [Count] = [1] (It always seems to be appeared at that time you mistake calling 'obj.get { ocv->getProp() }' <-> 'obj.call { ocv->invoke() }'.) IDispatch::Invoke AutoWrap() failed

@anisimov
Copy link
Author

In continuation of the dialog with myself :)

The above script also consumes a lot of memory. And memory usage raises every second. And your garbage collection functions don't change the picture.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant