I have written a software (lets call it kinectRecorder.exe) that uses "kinect for windows sensor" to record images. The machine that connects to the kinect sensor has windows 8.1 and kinect v2 installed. The software is able to successfully records images from kinect sensor when running locally. (meaning if I hit f5 from vs2013, frames are recorded to local disk)
Due to resource constraint and other requirement, I have to remotely kickoff kinectRecorder.exe on the windows 8.1 machine from a windows 7 machine. on the windows 7 machine, I remotely kick off the kinectRecorder.exe using windows WMI infrastructure.
The credential used for windows 8.1 machine and windows 7 machine are the same under same windows domain. the credential used to authenticate in wmi is also the same, I can see the user name running kinectRecorder.exe after kinectrecorder.exe is started remotely.
The result is that kinectRecorder.exe starts ok, but after the kinectsensor.open call, isavailable property changed to false, meaning sensor not detected.
What's stopping kinect sensor to be detected/opened (i'm not sure what the correct jargon is here)?
I have been search the web, In msdn documentation (known issues), I cannot find the problem being mentioned. I wonder if I'm the only person who has encountered this issue before.
Any pointer is hugely appreciated.
Kinect is not supported within the context of a service because of the underlying need for a user session, see https://social.msdn.microsoft.com/Forums/en-US/72cecf8b-ac64-47e2-b54b-ddbd1dc237c9/calling-kinect-sdk-apis-from-a-windows-service-is-not-possiblesupported?forum=kinectv2sdk
Can determine that the system has at least one logged in user and can you launch the application within that users session? KinectMontior/KinectService must be running for the runtime to get any data from the sensor. If you use Remote Desktop to log into that user session, you can confirm this works by running any of the samples and they should work without issue(remember to ensure that your audio remoting is left on the server, see troubleshooting guide https://social.msdn.microsoft.com/Forums/en-US/20dbadae-dcee-406a-b66f-a182d76cea3b/troubleshooting-and-common-issues-guide?forum=kinectv2sdk).
Carmine Sirignano - MSFT
- Proposed as answer by Carmine Si - MSFTMicrosoft employee, Owner Monday, February 09, 2015 8:03 PM
Thanks for your reply. I will take a look at the article you refered to.
let me define some terms so our understanding are consistent.
Host machine: Window 8.1 machine with kinect connected and my kinectrecorder software lives.
Client machine: windows 7 machine where I want to kick start
From what I can see, if kinectrecorder is started as a background process, kinect does not start (maybe the driver doesn't like it to be running on the background?). But my kinectrecorder process is invoked to be running on the "foreground" (I don't know if it's the right term), then kinect will start. For example, I can run my kinectrecorder on host using remote desktop from client and it works (meaning records), I can launch kinect using psexec (from sysinternals) from client, and kinectrecorder records on host.
The real question is, how do I invoke a remote process on host and make sure it is the foreground process?