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

63 篇文章 0 订阅
9 篇文章 0 订阅

方法一:

以管理员身份运行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.


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值