問題タブ [interopservices]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 一部のバージョンの Windows で、WTSQueryUserToken を使用してユーザー ログオン時に Windows サービスが対話型プロセスを開始できない
このリンクに従って、C# ソリューションにWTSQueryUserTokenを実装し、 「LocalSystem」として実行する Windows サービスのCreateProcessAsUserWrapper.LaunchChildProcess("app_path")
メソッドを呼び出しました。デスクトップと対話できるプロセスを開始できますが、Windows Professional の場合であり、Windows Ultimate の場合ではありません。Windows Professional 64 ビットで試してみたところ、ユーザー ログオン時にインタラクティブにプロセスを正常に開始できましたが、Windows Ultimate 64 ビット バージョンではメソッドが false を返し、プロセスが実行されていないのにサービスが実行されていることがわかります。OnStart
CreateProcessAsUser
SCM
私のプロセスは、デスクトップ操作のために現在ログオンしているユーザー アカウントで実行する必要があり、InteropServices
. フレームワークの問題でしょうか?問題に到達する方法は?助けてください。
編集:
両方のマシンが Windows 7 64 ビットを実行しています。CreateProcessAsUser
後にエラーコードを取得するために次のコードを追加しましたが、「要求された操作には昇格が必要です」というエラーが返されます。
これは Windows 7 Ultimate でのみ発生し、Windows 7 Professional では発生しません。CreateProcessWithLogonW
ログオンしているすべてのユーザーに対してプロセスを実行する必要があるため、代わりにメソッドを使用できないと思います。この昇格特権の問題を今すぐ修正するにはどうすればよいですか?
編集:
2 つapp.manifest
のファイルがありました。1 つはサービス プロジェクト内にあり、もう 1 つは win フォーム (プロセス) プロジェクト内にあります。両方のファイルを削除し、ビルドしmsi
てWiX
再度テストしました。現在、すべてのマシンで正常に実行されており、ログオンしているすべてのユーザー アカウントでプロセスが開始されています。しかし、今一つ問題が発生しています。実際には、windows/system フォルダーの下にログを書き込む必要がありますが、今はできません。取得しています」UnauthorizedAccessException
また、管理者以外のユーザーはプロセスを停止またはアンインストールすることはできませんが、この場合、ユーザーは対応するユーザー アカウントで実行されているため、タスク マネージャーを起動してそこからプロセスを終了できますか。ユーザーアカウントでプロセスを実行できますが、特権が昇格されているため、ログを windows/system フォルダーの下に書き込み、ユーザーが管理者の許可なしにプロセスを停止するのを防ぐことができますか? 少なくとも最初の問題、つまりシステムの下にログファイルを書き込むことを解決するフォルダーは私にとって非常に重要です。
編集:SetTokenInformation
私のサービスと一緒に
追加した後DuplicateTokenEx
、ログでアプリを起動できませんSetTokenInformation()
でした。完全なコードを提供しています。すべての手順で正しく更新されているかどうかを確認してください。
以前の編集で述べたように、DuplicateTokenEx
&を追加する前SetTokenInformation
は、サービスはアプリを実行できましたが、System32 フォルダーの下にログを記録できませんでした。それを達成するために、上記のコードに更新したところ、SetTokenInformation()
メソッドに特権エラーが表示されるようになりました。
編集:最後に、サービスはログオンしたユーザー アカウントでプロセスを開始し、すべてのログ ファイルを適切なユーザー appdata パスに書き込むことができます。削除しましSetTokenInformation
た。次のコードとCreateEnvironmentBlock()
メソッドは、プロセスが別のユーザー環境を取得し、ユーザーの appdata パスを取得するのに役立ちました。
c# - Win API NTFS OpenFileByID が AccessViolationException をスローする
test() の OpenFileByID 行は私に与えていますSystem.AccessViolationException Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
Windows デスクトップ用の Visual Studio Express 2013 で実行しているこのコード例(回答を参照)を複製しようとしています。しかし、この例は私にはうまくいかないようです。test() の OpenFileByID 行で壊れています。
簡単に言えば、ファイルの ID を取得し、その ID からファイル ハンドルを作成しようとしています。後で、そのハンドルを使用してファイルに関する情報を取得する予定です。ID を使用している理由は、リンク切れを修復できるようにするためです。ターゲット ファイルの GUID は、推定される場所よりもはるかに信頼性が高いからです。助けてください!
編集: 開こうとしているファイルは、デスクトップ上の通常のテキスト ファイルであり、特別なものではありません。
c# - WinServer 64 ビット 2012 R2 上の Autodesk.Inventor.Interop.dll - インターフェイスが登録されていない
Autodesk Inventor エンジンに基づいた非常に単純な Web アプリケーションを開発しようとしています。
Visual Studio 2010 と Inventor 2015 を使用して Win7 64 ビットで開発していますが、すべてがデバッグで完全に機能していますが、Web サーバーで公開するとエラーが発生します。
HRESULT: 0x800401F3 (CO_E_CLASSSTRING)
とメッセージ
インターフェイス文字列が無効です
エラーが表示される C# コード行は次のとおりです。
私のテストの完全なコードは次のとおりです。
このコードは Inventor 2015 ガイドから直接取得しましたが、(繰り返し) ローカル マシンではすべて問題ありませんが、サーバーでは問題ありません。
- 権限を確認しました(全員:フルコントロール)
- system32 と SysWOW64 の両方で regsvr32 (登録不可) で手動で登録しました
- フレームワーク 32 と 64 に regasm で登録しました (登録成功!)
- 32 ビット アプリケーションで動作するように Web サイトを設定しました
しかし、何もこの問題を解決できませんでした。
pInvoke を使用して dll を手動でインポートする可能性について考えましたが、成功しませんでした...
私はよくグーグルで検索しましたが、オートデスクに問い合わせてみましたが成功しませんでした。
サーバー上で Inventor を起動して、動作するかどうかを確認したところ、完全に動作しました!
誰か助けてくれませんか?
親切な返信ありがとうございます!
エマヌエーレ
c# - VB.NET から C# に変換 - 値が正しく返されない
完全に機能している元の VB.net:
C# に変換されたコード ( http://converter.telerik.com/を使用)
関数が実際にいくつかの値を返す場合でも、問題はbuff
変わりませんHolderName
(USB モニターを使用して監視)。なぜこれが起こっているのですか、どうすれば修正できますか?
vb.net - このファイルにアクセスできない原因と解決策は何ですか?
hereのサンプルコードから始めて、基本的なVB.NET Excelファイル作成アプリを機能させようとすると、次のコードでエラーメッセージが表示されます。
私は最初にこれを試しました:
(バックワックを回避できませんでした)、そしてこれ(「vbexcel.xlsx」)は、次のように「52587100」と誤解されていました:
次のように、サブフォルダーをパスに追加し、エスケープ文字を追加します。
...同様のエラーが発生しましたが、今回はファイルにアクセスできないというだけです(ファイル名が「52587100」であるとは主張していません):
このコードの何が問題で、ファイルにアクセスできないのでしょうか?
c# - メディア再生時の WMPLib コンソール アプリの例外
私は InteropServices の使用に慣れていませんがWMPLib
、コンソール アプリケーションから曲を再生するために使用しています。Visual Studio からデバッグすると、アプリケーションは期待どおりに動作します。しかし、クラッシュして次の例外が発生します。
コマンドラインから実行すると:
play
コマンド
の簡単なコードは次のとおりです。
どんな助けでも大歓迎です。