1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

vaccine_gene&breed_gene 対策

Last updated at Posted at 2021-10-21

今だ流れ着いてくる
vaccine_gene
breed_gene
ですが、mayaScannerをインストールしていると感染前に止めてくれますが
インストールしてなかったり、loadしてなかったりすると感染してしまう。

うっかり感染しちゃったうっかりさんの為に対応策を考える。

※会社や組織に属していてシステムの人が在籍してる場合は、自分で何とかしないでその人に報告して対処してもらってください。

処理を確認

感染 感染 と言ってるけれども、実際何がどのように処理されているのかを確認してみる。

1: 感染してるファイルを開く
image.png

2: vaccine_gene のスクリプトが実行される
image.png

cmds.internalVar(userAppDir=True) + '/scripts' にあるuserSetup.pyに

import vaccine
cmds.evalDeferred('leukocyte = vaccine.phage()')
cmds.evalDeferred('leukocyte.occupation()')

を追記する。存在しない場合は生成する

3:breed_gene のスクリプトが実行される
image.png
vaccine_gene.notesの内容を使用して
cmds.internalVar(userAppDir=True) + '/scripts' にvaccine.pyを生成する

4:maya再起動
image.png
userSetup.pyが読み込まれ

import vaccine
cmds.evalDeferred('leukocyte = vaccine.phage()')
cmds.evalDeferred('leukocyte.occupation()')

が起動時に実行される。

それによってスクリプトジョブがシーンに追加される

cmds.scriptJob(event=["SceneSaved", "leukocyte.antivirus()"], protected=True)

5:ファイル保存
image.png
vaccine.pyが実行され、vaccine_gene と breed_gene をシーン内に生成する。

つまり 感染した状況 とは

  • vaccine.py が存在する
  • userSetup.py に追記されている

状況の事になる。

対応

1:vaccine.pyの除去

cmds.internalVar(userAppDir=True) + '/scripts'

の場所を開き、vaccine.py と vaccine.pyc を削除する
最低限これをやっておけば vaccine_gene と breed_gene は生成されなくなる。
ただしuserSetup でコケるようになるので、個人的にuserSetup をカスタムしてる場合には次項も必要。

2:userSetup.pyの再編集

cmds.internalVar(userAppDir=True) + '/scripts'

の場所を開き、userSetup.py の中身を確認。

import vaccine
cmds.evalDeferred('leukocyte = vaccine.phage()')
cmds.evalDeferred('leukocyte.occupation()')

この3行を削除。

1はともかく、2は少しハードルが高いので、まとめてスクリプト化してみる。

targetPath = cmds.internalVar(userAppDir=True) + '/scripts'

##vaccine.py vaccine.pycの削除
if os.path.exists(targetPath + "/vaccine.py"):
    os.remove(targetPath + "/vaccine.py")
    print("remove " + targetPath + "/vaccine.py")

if os.path.exists(targetPath + "/vaccine.pyc"):
    os.remove(targetPath + "/vaccine.pyc")
    print("remove " + targetPath + "/vaccine.pyc")

##userSetup.py の編集
##念のため編集前のファイルをuserSetup_backupとして保存
if os.path.exists(targetPath + "/userSetup.py"):
    removeLine = [
                "import vaccine",
                "cmds.evalDeferred('leukocyte = vaccine.phage()')",
                "cmds.evalDeferred('leukocyte.occupation()')"
    ]

    output = []    
    health = True
    
    with open(targetPath + "/userSetup.py", "r") as f:
        for line in f:
            line = line.rstrip()

            if line in removeLine:
                health = False
            else:
                output.append(line + "\n")                
    f.close()                

    if health == False:
        shutil.copy2(targetPath + "/userSetup.py", targetPath + "/userSetup_backup")
        print("backuped " + targetPath + "/userSetup_backup")            
        with open(targetPath + "/userSetup.py", "w") as f:
            f.writelines(output)
        f.close()        
        print("edited " + targetPath + "/userSetup.py")

ただし、感染状態でmayaを起動してしまっていると

cmds.scriptJob(event=["SceneSaved", "leukocyte.antivirus()"], protected=True)

これらがアクティブなので、またvaccine.pyが生成されてしまう。

追記

for i in cmds.scriptJob(listJobs =True):
    if "leukocyte.antivirus()" in i:
        index = int(i.split(":")[0])
        cmds.scriptJob(kill = index, force =True)

対象のスクリプトジョブを除去。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?