解决开ServiceHost时候System.PlatformNotSupportedException: Operation is not supported on this platform.

来源:互联网 发布:js获取list 编辑:程序博客网 时间:2024/05/20 18:43

方法一:

以管理员身份运行VS。

方法二:

添加配置文件方法如下:

It turns out the root cause of the problem was how UAC interacts with processes.  I have some code in the application that kicks up to an elevated privilege level (administrator), however, UAC does not permit this (seemly silently).  It is only if the entire process begins with elevated privileges does the impersonation actually work.  So long story short, when I run either the application or the Visual Studio environment as Administrator, the application starts up a-ok.  (FYI, my domain account is in the local administrators group for the machine.)

So, to keep testing the theory, I turned User Account Control in Windows 7 *off*, restarted my computer, and tried again, and this time it worked.  I then turned UAC back *on*, restarted, and tried again, and as before the application failed.

The final solution was to add an app.manifest to the project that hosts the service, and specify the following elevated privileges (As seen in copied xml from the .manifest):

<?xml version="1.0" encoding="utf-8"?><asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">  <security>   <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">    <!-- UAC Manifest Options      If you want to change the Windows User Account Control level replace the       requestedExecutionLevel node with one of the following.    <requestedExecutionLevel level="asInvoker" uiAccess="false" />    <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />    <requestedExecutionLevel level="highestAvailable" uiAccess="false" />      If you want to utilize File and Registry Virtualization for backward       compatibility then delete the requestedExecutionLevel node.    -->    <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />   </requestedPrivileges>  </security> </trustInfo></asmv1:assembly>

So this resolved my problem, and I suspect it might help with the others as well.

I hope this helps,

j.

PS.  The steps to add a .manifest file to the Host Project were as follows:

1. Open the solution containing the Host Project

2. Right click on the project and add a new item

3. Select Application Manifest File

4. Edit the .manifest file to change default requestedExecutionLevel from "asInvoker" to "requireAdministrator"

5. Save the changes

6. Open the properties for the Host Project (not the solution)

7. Under the Application settings, sub-section Resources, under the Icon and Manifest area, change the Manifest drop down to "app.manifest" if it isn't already.

8. Save, build, run.  When you run from the application from the command line, you should get a prompt in Windows Vista and 7 to elevate the application privileges.


0 0
原创粉丝点击