[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2007/06/11(Mon) 10:29
投稿者名:MOONEY
Eメール:
URL :
タイトル:
Windows Vistaのスタートアップへの登録・削除
こんにちわ。いつもお世話になっております。
VB6.0(SP5)で作ったアプリの環境設定画面でスタートアップに
当該アプリのリンクを追加・削除処理をさせています。
しかし、OSがWindows Vistaの場合、削除ができません。登録は
できているので、削除もできると勝手に思っているのですが、
削除できない原因としてはどのようなことが考えられますで
しょうか。
開発で使っているOSはWinXP Proです。

投稿時間:2007/06/11(Mon) 13:58
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: Windows Vistaのスタートアップへの登録・削除
> 当該アプリのリンクを追加・削除処理をさせています。

追加/削除は、どのように行っているのでしょうか?

投稿時間:2007/06/12(Tue) 11:07
投稿者名:MOONEY
Eメール:
URL :
タイトル:
Re^2: Windows Vistaのスタートアップへの登録・削除
> 追加/削除は、どのように行っているのでしょうか?

このような感じです。

   '=================================
   '***** OSバージョンを取得
   '=================================
   If IsWindows95 Then
      wkStartUp = "StartUp"
   Else
      wkStartUp = "AllUsersStartUp"
   End If
  
   Set objWS = CreateObject("WScript.Shell")
   strStartUp = objWS.specialfolders((wkStartUp))

   wkLnkPath = strStartUp & "\" & cLnk
   wkExePath = App.Path & "\" & cExe
  
   '***** スタートアップ登録
   If idx = 0 Then
      '***** スタートアップに常駐プログラムのショートカットを登録
      Set objSC = objWS.CreateShortcut(wkLnkPath)
      objSC.TargetPath = wkExePath
      objSC.IconLocation = wkExePath + ",0"        'ショートカットアイコン指定
      objSC.Save
      
      '***** メモリ解放
      Set objSC = Nothing
      Set objWS = Nothing
      
      '***** キャプション名を与えてハンドルを取得
      If Len(cstrCapName) Then
         hwnd = FindWindow(vbNullString, cstrCapName)
         If hwnd <> 0 Then Exit Sub
      End If

      '***** 常駐プログラムの起動
      If Dir$(wkExePath) <> "" Then '存在チェック
         Shell cExe, vbNormalFocus
      End If
      
   '***** スタートアップ削除
   Else
      If Dir$(wkLnkPath) <> "" Then
         '***** スタートアップに常駐プログラムのショートカットを削除
         Kill strStartUp & "\" & cLnk
      End If
      '***** 常駐プログラムのプロセスをKill
      Call hwndAcquire
      
   End If  
  
   Exit Sub

投稿時間:2007/06/12(Tue) 12:37
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^3: Windows Vistaのスタートアップへの登録・削除
> wkStartUp = "AllUsersStartUp"
インストーラなら良いですけど、アプリ側でここに書き込んではまずいのでは…?
一般ユーザが編集すべきフォルダではありませんし。

アプリ側で書き込むなら、個人別フォルダを使わないと。

> If Dir$(wkLnkPath) <> "" Then
>    '***** スタートアップに常駐プログラムのショートカットを削除
>    Kill strStartUp & "\" & cLnk
> End If
Dir に合わせて、「Kill wkLnkPath」とすべきかと。
# 結果的には同じことですが。


> しかし、OSがWindows Vistaの場合、削除ができません。登録は
提示されたコードを当方で試したところ、下記のような結果になりました。

<通常起動時>
保存時に、ランタイムエラー 0x80070005 が発生。
「ショートカット "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\test.lnk" を保存できません。」

<管理者実行時>
保存および削除ともに動作。

投稿時間:2007/06/15(Fri) 09:35
投稿者名:MOONEY
Eメール:
URL :
タイトル:
Re^4: Windows Vistaのスタートアップへの登録・削除
ご返信遅れてしまい申し訳ありません。

> > wkStartUp = "AllUsersStartUp"
> インストーラなら良いですけど、アプリ側でここに書き込んではまずいのでは…?
> 一般ユーザが編集すべきフォルダではありませんし。
>
> アプリ側で書き込むなら、個人別フォルダを使わないと。

あ、いけないことをしていたのですね。。。以後気をつけます。


> > If Dir$(wkLnkPath) <> "" Then
> >    '***** スタートアップに常駐プログラムのショートカットを削除
> >    Kill strStartUp & "\" & cLnk
> > End If
> Dir に合わせて、「Kill wkLnkPath」とすべきかと。
> # 結果的には同じことですが。
>
>
> > しかし、OSがWindows Vistaの場合、削除ができません。登録は
> 提示されたコードを当方で試したところ、下記のような結果になりました。
>
> <通常起動時>
> 保存時に、ランタイムエラー 0x80070005 が発生。
> 「ショートカット "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\test.lnk" を保存できません。」
>
> <管理者実行時>
> 保存および削除ともに動作。

コマンドプロンプトを右クリック”管理者として実行”のような要領で
アプリを起動すると保存・削除できるということでしょうか。

投稿時間:2007/06/15(Fri) 10:27
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^5: Windows Vistaのスタートアップへの登録・削除
> あ、いけないことをしていたのですね。。。以後気をつけます。
All Users フォルダは、一般ユーザへの書き込み権限がないですからね。
読み込みはできますけど。

アプリから扱いたいのであれば、権限昇格の仕組みを組み込む必要があるでしょう。
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=1523473&SiteID=7
# 実行時に、黒画面に遷移するアレです。

> コマンドプロンプトを右クリック”管理者として実行”のような要領で
> アプリを起動すると保存・削除できるということでしょうか。
はい、そういう意味です。
なぜ、ここで[コマンドプロンプト]が挙げられたのかは謎ですが。(^^;

ただし「登録はできたが、削除はできない」という状況は、こちらで再現できていません…。

投稿時間:2007/06/15(Fri) 20:21
投稿者名:MOONEY
Eメール:
URL :
タイトル:
Re^6: Windows Vistaのスタートアップへの登録・削除
> ただし「登録はできたが、削除はできない」という状況は、こちらで再現できていません…。

わかりました。色々とありがとうございました。